读取 OData 服务并重新绑定列表
Read OData Service and rebind List
我有一个列表,绑定到来自 mainService 的实体集。同一视图包含一个筛选字段。一旦用户输入了一些过滤条件,就应该进行读取。我已经在阅读 OData 实体集,结果正在返回。但是我没有运气让 table 绑定到那个结果
XML 视图中的绑定
<List
id="list"
width="auto"
class="sapFDynamicPageAlignContent"
items= "{/ItProjHeadSet}"
busyIndicatorDelay="{masterView>/delay}"
noDataText="{masterView>/noDataText}"
mode="{= ${device>/system/phone} ? 'None' : 'SingleSelectMaster'}"
growing="true"
growingScrollToLoad="true"
updateFinished=".onUpdateFinished"
selectionChange=".onSelectionChange">
然后,当点击智能过滤栏的GO按钮时,我触发的onSearch事件如下:
onSearchProjects : function (oEvent) {
var oMasterPage = this.getView().byId("masterPage");
var that = this;
var aTokens = this._oMultiInput.getTokens();
var aMultiFilters = aTokens.map(function (oToken) {
var oProperties = oToken.data("range");
return new Filter({
path: oProperties.keyField,
operator: FilterOperator[oProperties.operation],
value1: oProperties.value1,
value2: oProperties.value2
});
});
oMasterPage.setBusy(true);
//Filter
this.getOwnerComponent().getModel().read("/ItProjHeadSet", {
filters: aMultiFilters,
success: function (oData) {
var list = that.getView().byId("list");
var projectModel = new JSONModel(oData);
var oModel = that.getView().getModel("/ItProjHeadSet");
oModel.setData(projectModel);
oModel.updateBindings(true);
error: function (oData) {
MessageToast.show(that.getResourceBundle().getText("noProjectsFetched"));
}
});
oMasterPage.setBusy(false);
},
那么问题是,虽然我在读取中收到了相应的成功结果,但 setData 似乎发生在与绑定到列表的模型不同的模型上。
我是否在成功阅读中进行了正确的模型更新?
此致,
马丁
我自己解决了,通过获取列表绑定然后应用过滤器:
List.getBinding("items").filter(aMultiFilters, "Application");
那么就不需要 getOwnerComponent 之类的了
我有一个列表,绑定到来自 mainService 的实体集。同一视图包含一个筛选字段。一旦用户输入了一些过滤条件,就应该进行读取。我已经在阅读 OData 实体集,结果正在返回。但是我没有运气让 table 绑定到那个结果
XML 视图中的绑定
<List
id="list"
width="auto"
class="sapFDynamicPageAlignContent"
items= "{/ItProjHeadSet}"
busyIndicatorDelay="{masterView>/delay}"
noDataText="{masterView>/noDataText}"
mode="{= ${device>/system/phone} ? 'None' : 'SingleSelectMaster'}"
growing="true"
growingScrollToLoad="true"
updateFinished=".onUpdateFinished"
selectionChange=".onSelectionChange">
然后,当点击智能过滤栏的GO按钮时,我触发的onSearch事件如下:
onSearchProjects : function (oEvent) {
var oMasterPage = this.getView().byId("masterPage");
var that = this;
var aTokens = this._oMultiInput.getTokens();
var aMultiFilters = aTokens.map(function (oToken) {
var oProperties = oToken.data("range");
return new Filter({
path: oProperties.keyField,
operator: FilterOperator[oProperties.operation],
value1: oProperties.value1,
value2: oProperties.value2
});
});
oMasterPage.setBusy(true);
//Filter
this.getOwnerComponent().getModel().read("/ItProjHeadSet", {
filters: aMultiFilters,
success: function (oData) {
var list = that.getView().byId("list");
var projectModel = new JSONModel(oData);
var oModel = that.getView().getModel("/ItProjHeadSet");
oModel.setData(projectModel);
oModel.updateBindings(true);
error: function (oData) {
MessageToast.show(that.getResourceBundle().getText("noProjectsFetched"));
}
});
oMasterPage.setBusy(false);
},
那么问题是,虽然我在读取中收到了相应的成功结果,但 setData 似乎发生在与绑定到列表的模型不同的模型上。 我是否在成功阅读中进行了正确的模型更新?
此致, 马丁
我自己解决了,通过获取列表绑定然后应用过滤器:
List.getBinding("items").filter(aMultiFilters, "Application");
那么就不需要 getOwnerComponent 之类的了