这基本上是针对此问题的解决方法:“How to use custom sorter in XML views”
由于目前无法在XML视图中使用自定义分拣机,我想也许可以在控制器中设置分拣机。
如何使用JS视图执行此操作:
var oTemplate = ... // irrelevant
var oList = new sap.m.List({
id: this.createId("someList"),
items: {
path: "/list",
template: oTemplate,
sorter: foo.bar.CustomSorter
}
});
当我想将其转换为XML视图时,我有以下内容:
<m:List id="someList"
items="{path: '/list'}">
<!-- hid ListItem implementation -->
</m:List>
然后,如何在控制器中为此列表设置分拣机? 还有,在哪里挂钩呢?选项:
onInit
onBeforeRendering
onAfterRendering
所以,我的期望是:
sap.ui.controller("foo.bar.controller.SomeController", {
onInit : function(){
var oList = this.getView().byId("someList");
oList.get___Something___().setSorter(foo.bar.CustomSorter);
};
};
但似乎不可能。
答案 0 :(得分:5)
您可以使用列表绑定的分拣机属性:
<List
id="invoiceList"
class="sapUiResponsiveMargin"
width="auto"
items="{
path : '/Invoices',
sorter : {
path : 'ProductName'
}
}" >
https://sapui5.hana.ondemand.com/#docs/guide/c4b2a32bb72f483faa173e890e48d812.html
我也尝试用onInit设置分拣机,不幸的是this.getView()。byId(“whateverID”)此时失败...
答案 1 :(得分:2)
对于JSView中的聚合绑定,您必须为Control提供模型和模板。
假设我们使用的是sap.ui.model.json.JSONModel:
var oModel = new sap.ui.model.json.JSONModel();
var oData = {
users: [
{
id: '15',
name: 'Peter'
},
{
id: '16',
name: 'Angela'
}
]
};
oModel.setData(oData);
现在我们获得了带有指定数据的JSONModel,我们可以继续为aggregationBinding创建一个模板:
var oItemTemplate = new sap.m.StandardListItem();
oItemTemplate.bindProperty('title', {path: 'name'});
现在我们得到了一个模板列表条目,我们将使用它来创建列表条目。目前我们会松散&#34;绑定完成后任何用户的id信息。因此,让我们将用户ID绑定为CustomData:
var oCustomData = new sap.ui.core.CustomData({
key: 'id'
});
oCustomData.bindProperty('value', {path: 'id'});
oItemTemplate.addCustomData(oCustomDataId); // adds the custom data to the template
稍后我们可以从相应的ListItem中检索此CustomData作为键/值对。
现在我们仍然想要为绑定配置添加自定义Sorter。在我们的例子中,我们创建了一个新的Sorter,它按照&#34; name&#34;来对项目进行排序。属性:
var oSorter = new sap.ui.model.Sorter('name');
var oBindingInfo = {
path: '/users',
template: oItemTemplate,
sorter: oSorter
};
在最后一步中,我们必须将项目绑定到我们的控件。在这种情况下,我们使用sap.m.List控件:
var oList = new sap.m.List();
oList.setModel(oModel);
oList.bindItems(oBindingInfo);
请记住,这只是一个简单的用例。我忽略了用于实例化控件的所有其他配置参数,因此可能还有一些工作要做。该示例仅涵盖纯文本数据绑定和排序。
有关详细信息,请参阅:
https://sapui5.hana.ondemand.com/docs/api/symbols/sap.ui.base.ManagedObject.html#bindAggregation
https://sapui5.hana.ondemand.com/#docs/guide/4ce11a576ef44bb680c81b36a0462e86.html
答案 2 :(得分:1)
你可以这样做:
onInit: function() {
var SORTKEY = "someSortKey";
var DESCENDING = true;
var GROUP = false;
var oList = this.getView().byId("someList");
var oBinding = oList.getBinding("items");
var aSorter = [];
// you may use foo.bar.CustomSorter instead:
aSorter.push(new sap.ui.model.Sorter(SORTKEY, DESCENDING, GROUP));
oBinding.sort(aSorter);
}
答案 3 :(得分:0)
onInit应该没问题。
使用List的方法bindItems绑定项目并应用分拣机。
类似的东西:
oList.bindItems('/ list',ListItemTemplate,foo.bar.CustomSorter);
此致 基莫