我有一个 xml 文件,其中包含这样的列表
view.xml
<List
id="myList"
items="{
path: '/myEntitySet'
}">
<items>
<StandardListItem
title="{myTitle}" />
</items>
</List>
“myEntitySet”需要动态过滤器参数 (myId) 才能正常响应,否则我将从后端收到 404 错误。 所以我使用 JavaScript 将过滤器添加到我的列表中。
controller.js
var oBinding = this.getView().byId("myList").getBinding("items");
var aFilter = [ new sap.ui.model.Filter("myId", sap.ui.model.FilterOperator.EQ, myDynamicId ) ];
oBinding.filter({
filters: aFilter
});
问题: “View-Request”在“controller-Request”之前触发几毫秒,并且请求失败(404 错误)。 我不想通过 JS 渲染列表以避免来自 View 的请求。有没有办法阻止查看请求?
最佳答案
有几种方法可以做到这一点。
最简单的方法是直接在 XML 中进行过滤,但我假设您的动态过滤参数无法在设计时写入,因此该选项不适用。
您只能在 Controller 中进行绑定(bind)。因为您说过您不想在 JavaScript 中“渲染”列表,所以您可以使用以下代码片段。
查看:
<List id="myList">
<dependents>
<StandardListItem id="myItem" title="{myTitle}" />
</dependents>
</List>
Controller :
this.byId("myList").bindItems("/myEntitySet", {
template: this.byId("myItem"),
//optional:
templateShareable: true
});
另一种可能性是使用 OData 模型 (v2) 的延迟批处理组功能。基本上,您可以通过为批量请求提供 groupId
将请求分组到单个批量请求中。
如果您将此类组标记为延迟,则在调用 OData 模型的 submitChanges
方法时会提交该组(及其包含的请求)。查看 ODataListBinding 的文档和 ODataModel .
查看:
<List id="myList" items="{
path: '/myEntitySet',
parameters: {batchGroupId: 'myGroup'}
}">
<StandardListItem title="{myTitle}" />
</List>
Controller :
//in onInit
this.getModel().getDeferredGroups(["myGroup"]);
//after you added the filter
this.getModel().submitChanges();
关于javascript - 避免 View 中出现错误的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43540822/