我只是遇到一个问题,我不确定该如何解决:
背景:我有一个具有两个视图的应用程序。第一个输入数字,第二个输入详细信息。在视图切换到详细视图之后,我将调用bindElement()从后端获取我的数据。
_onRouteMatched: function(oEvent) {
...
this.getView().bindElement({
path: "/EntitySet('" + id+ "')"
});
...
}
问题是ID通常是相同的,但是如果ID与上次调用不同,则该方法仅会调用后端。因此,我尝试使用以下方法解决问题:
this.getView().getModel().read("/EntitySet('" + id+ "')",{
success: function (oData, response){
that.getView().setModel(oData, "");
},
error: function (oError){
}
});
通过这种方式,数据始终是最新的。但是现在的绑定有些不同。用BindElement绑定:
{
"id" : "1234"
"propety1" : "abc"
...
}
与setModel和id = 1234绑定:
{`
"EntitySet('1234')": {
"id" : "1234"
"propety1" : "abc"
...
}
}
首先,我的绑定看起来像这样:
<ObjectHeader title="{id}">
</ObjectHeader>
现在,它必须看起来像这样:
<ObjectHeader title="{/EntitySet('1234')/id}">
</ObjectHeader>
并且这里我有一个问题,因为id的值(在这种情况下为1234)将始终不同,因此绑定将无法工作。我无法直接绑定到ObjectHeader,因为稍后我将需要模型中的一些属性。这就是我绑定视图以使所有内容仍然可用的原因。
我的想法是在read方法的成功方法内编辑绑定。我想删除周围的元素。你有一个主意,怎么做?还是解决我的问题的更简单/更好的主意?
编辑:我忘了提到刷新方法。这是可能的,但是我必须放在哪里?我不想两次致电后端。
在绑定上下文之前,只需调用API myODataModel.invalidateEntry(<key>)
即可检索最新数据。