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)
};