| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- sap.ui.define([
- "sap/ui/base/Object",
- "sap/base/Log"
- ], function (BaseObject, Log) {
- "use strict";
- return BaseObject.extend("sap.ui.demo.orderbrowser.controller.ListSelector", {
- /**
- * Provides a convenience API for selecting list items. All the functions will wait until the initial load of the a List passed to the instance by the setBoundMasterList
- * function.
- * @class
- * @public
- * @alias sap.ui.demo.orderbrowser.controller.ListSelector
- */
- constructor: function () {
- this._oWhenListHasBeenSet = new Promise(function (fnResolveListHasBeenSet) {
- this._fnResolveListHasBeenSet = fnResolveListHasBeenSet;
- }.bind(this));
- // This promise needs to be created in the constructor, since it is allowed to
- // invoke selectItem functions before calling setBoundMasterList
- this.oWhenListLoadingIsDone = new Promise(function (fnResolve, fnReject) {
- // Used to wait until the setBound masterList function is invoked
- this._oWhenListHasBeenSet
- .then(function (oList) {
- oList.getBinding("items").attachEventOnce("dataReceived",
- function () {
- if (this._oList.getItems().length) {
- fnResolve({
- list: oList
- });
- } else {
- // No items in the list
- fnReject({
- list: oList
- });
- }
- }.bind(this)
- );
- }.bind(this));
- }.bind(this));
- },
- /**
- * A bound list should be passed in here. Should be done, before the list has received its initial data from the server.
- * May only be invoked once per ListSelector instance.
- * @param {sap.m.List} oList The list all the select functions will be invoked on.
- * @public
- */
- setBoundMasterList: function (oList) {
- this._oList = oList;
- this._fnResolveListHasBeenSet(oList);
- },
- /**
- * Tries to select and scroll to a list item with a matching binding context. If there are no items matching the binding context or the ListMode is none,
- * no selection/scrolling will happen
- * @param {string} sBindingPath the binding path matching the binding path of a list item
- * @public
- */
- selectAListItem: function (sBindingPath) {
- this.oWhenListLoadingIsDone.then(
- function () {
- var oList = this._oList,
- oSelectedItem;
- if (oList.getMode() === "None") {
- return;
- }
- oSelectedItem = oList.getSelectedItem();
- // skip update if the current selection is already matching the object path
- if (oSelectedItem && oSelectedItem.getBindingContext().getPath() === sBindingPath) {
- return;
- }
- oList.getItems().some(function (oItem) {
- if (oItem.getBindingContext() && oItem.getBindingContext().getPath() === sBindingPath) {
- oList.setSelectedItem(oItem);
- return true;
- }
- });
- }.bind(this),
- function () {
- Log.warning("Could not select the list item with the path" + sBindingPath + " because the list encountered an error or had no items");
- }
- );
- },
- /**
- * Removes all selections from master list.
- * Does not trigger 'selectionChange' event on master list, though.
- * @public
- */
- clearMasterListSelection: function () {
- //use promise to make sure that 'this._oList' is available
- this._oWhenListHasBeenSet.then(function () {
- this._oList.removeSelections(true);
- }.bind(this));
- }
- });
- });
|