SAP Fiori 官方Browse Orders例子的小知识点

官方Browse Orders例子的小知识点

vx:xiaoshitou5854

一览页相关的小点

  • List控件的busyIndicatorDelay属性,单位是milliseconds
    指定它后,List就会在指定的事件过了后,才会被显示。
var oList = this.byId("list");
//得到busyIndicatorDelay的值,如果view页面没有设定,则默认值是1000毫秒
var iOriginalBusyDelay = oList.getBusyIndicatorDelay();
  • List控件的mode属性,设置每一行是否是可以选择的,单选还是多选
    mode="{= ${device>/system/phone} ? 'None' : 'SingleSelectMaster'}"
    Values:
    Delete - Delete mode (only one list item can be deleted via provided delete button)
    MultiSelect - Multi selection mode (more than one list item can be selected).
    None - Default mode (no selection).
    SingleSelect - Right-positioned single selection mode (only one list item can be selected).
    SingleSelectLeft - Left-positioned single selection mode (only one list item can be selected).
    SingleSelectMaster - Selected item is highlighted but no selection control is visible (only one list item can be selected)
  • List控件的growing属性,
    设置true后,一页就显示20条数据,在页面的最下面会多出一个【More】的可点击连接,点完后显示后20条数据。
  • List控件的growingScrollToLoad属性,
    growing设置为ture的前提下,才可以使用此属性。为true后,页面最下方的【More】就不显示了,当滚到最下方后,其余的数据会自动显示。
  • List控件的updateFinished属性,
    页面的数据绑定完成后,会回调此函数,此函数要在view对应的controller里定义。
  • List>items>ObjectListItem>title
    显示在左侧
  • List>items>ObjectListItem>number
    显示在右侧
  • List>items>firstStatus>state和text
    显示在右侧
    state是控制字的颜色,它的合法值:Error(红色),Success(绿色),Warning(橘色),Information(蓝色)。
    text是显示的文字。
  • List>items>attributes
    显示在左侧,List>items>ObjectListItem>title的下面
  • List>items>attributes>ObjectAttribute
    显示在左侧,List>items>ObjectListItem>title的下面,可以有多个,每一个都在独立的一行
  • headerToolbar>OverflowToolbar>SearchField
    搜索框
    showRefreshButton:是否在搜索框上显示刷新按钮,默认是false,true就显示。(焦点离开搜索框后才显示)
    search:执行搜索的函数。
  • headerToolbar>OverflowToolbar>SearchField>layoutData
    控制搜索框的大小
  • headerToolbar>OverflowToolbar>ToolbarSpacer
    在SearchField控件后面,加空白区域

一览画面的过滤和分组

一般使用fragment做一个单独的xml文件(在view目录下),xml里面filterItems是过滤页面,groupItems是分组页面。

  • 里面套若干,每个ViewSettingsItem就是要做过滤的字段
    ViewSettingsFilterItem里的key属性,是EntitySet的名字;ViewSettingsItem里的key属性是EntitySet里面字段的名字
  • 里面套若干每个ViewSettingsItem就是要做分组的字段
    ViewSettingsFilterItem里的key属性,是EntitySet的名字;ViewSettingsItem里的key属性是EntitySet里面字段的名字
  • 点击确定按钮后,会调用ViewSettingsDialog的confirm方法。confirm方法里要实现过滤和分组的逻辑。
    过滤的实现要点:this._oList.getBinding("items").filter(aFilters, "Application");//aFilters是数组
aFilters.push(new Filter("ShippedDate", FilterOperator.NE, null));

分组的实现要点:this._oList.getBinding("items").sort(aSorters);

var mParams = oEvent.getParameters(),
				sPath,
				bDescending,
				aSorters = [];
			// apply sorter to binding
			if (mParams.groupItem) {
				mParams.groupItem.getKey() === "CompanyName" ?
					sPath = "Customer/" + mParams.groupItem.getKey() : sPath = mParams.groupItem.getKey();
				bDescending = mParams.groupDescending;
				var vGroup = this._oGroupFunctions[mParams.groupItem.getKey()];
				aSorters.push(new Sorter(sPath, bDescending, vGroup));
			}

Sorter构造函数的参数说明:
1,sPath:要做分组的EntitySet里的字段的名字。上代码里"Customer/" + mParams.groupItem.getKey()部分,为什么要加"Customer/"呢?
因为List控件的EntitySet不是Customer,而这里要用EntitySet为Customer的下面的字段。
2,bDescending:在画面上选择的升序或者降序。
3,vGroup:回调函数。必须返回一个Object,此Object里必须有key和text属性,key是要分组的字段的值,text是在页面上显示的具体文本。

this._oGroupFunctions = {
				CompanyName: function (oContext) {
					var sCompanyName = oContext.getProperty("Customer/CompanyName");
					return {
						key: sCompanyName,
						text: sCompanyName
					};
				},

				OrderDate: function (oContext) {
					var oDate = oContext.getProperty("OrderDate"),
						iYear = oDate.getFullYear(),
						iMonth = oDate.getMonth() + 1,
						sMonthName = this._oMonthNameFormat.format(oDate);

					return {
						key: iYear + "-" + iMonth,
						text: this.getOwnerComponent().getModel("i18n").getResourceBundle().getText("masterGroupTitleOrderedInPeriod", [sMonthName, iYear])
					};
				}.bind(this),

				ShippedDate: function (oContext) {
					var oDate = oContext.getProperty("ShippedDate");
					// Special handling needed because shipping date may be empty (=> not yet shipped).
					if (oDate != null) {
						var iYear = oDate.getFullYear(),
							iMonth = oDate.getMonth() + 1,
							sMonthName = this._oMonthNameFormat.format(oDate);

						return {
							key: iYear + "-" + iMonth,
							text: this.getOwnerComponent().getModel("i18n").getResourceBundle().getText("masterGroupTitleShippedInPeriod", [sMonthName, iYear])
						};
					} else {
						return {
							key: 0,
							text: this.getOwnerComponent().getModel("i18n").getResourceBundle().getText("masterGroupTitleNotShippedYet")
						};
					}
				}.bind(this)
			};

详细页相关的小点

posted @ 2021-11-11 17:02  小石王  阅读(251)  评论(0编辑  收藏  举报