我将sap.m.SelectDialog
与sap.ui.model.odata.v2.ODataModel
一起使用,SelectDialog中的搜索实现遵循the sample
handleSearch: function(oEvent) {
var sValue = oEvent.getParameter("value");
var oFilter = new Filter("Name", sap.ui.model.FilterOperator.Contains, sValue);
var oBinding = oEvent.getSource().getBinding("items");
oBinding.filter([oFilter]);
},
handleSearch
将触发EntitySet的substringof
方法,但我们的oData服务未实现substringof
,skip
,top
。
所以我的问题是,因为前端已经获得了整个数据,我可以在客户端进行过滤吗?
我尝试在handleSearch
中设置DefaultOperationMode:
this._oModel.sDefaultOperationMode = "Client";
不能正常工作。
还尝试直接在模型中操作数据,但是this._oModel.oData不返回整个数据。但是当我向下滚动时,会添加新项目而不会触发新的GET。对此感到非常困惑。
顺便说一句,如果可以这样做,如何隐藏SelectDialog
中的搜索框,似乎没有提供相应的方法。
答案 0 :(得分:2)
感谢@Medera,找到了一个优雅的方式:
items="{
path: '/PackageSet',
parameters: {operationMode: 'Client'}
}">
同时将我的问题标记为重复。
@Not Recommended
感谢@Jorg,通过将oData模型更改为JSON模型来修复此问题:
this._oModel.read("/PackageSet", {
success: this.successGetPackgeCallback.bind(this),
error: this.errorCallback.bind(this)
});
successGetPackgeCallback: function(oResult) {
var oModel = new JSONModel(oResult.results);
this.selectDialog.setModel(oModel);
},
OData模型是服务器端模型,这意味着数据集仅在服务器上可用,客户端只知道当前可见(请求)的数据。排序和过滤等操作在服务器上完成。
JSON模型是客户端模型,因此适用于客户端完全可用的小型数据集。