每次用户访问页面时如何刷新以前绑定的实体

How to refresh previously bound entity every time user visits the page

我刚刚 运行 遇到了一个我不确定如何解决的问题。

背景:我的应用有两个视图:

视图切换到详细视图后,我会调用 bindElement() 从后端获取我的数据。

_onRoutePatternMatched: function(oEvent) {
  // ...
  this.getView().bindElement({
    path: "/EntitySet('" + id+ "')"
  });
},

问题是 ID 经常是相同的,因此,只有当 ID 与上次调用不同时,该方法才会调用后端。

所以我尝试使用以下方法解决问题:

this.getView().getModel().read("/EntitySet('" + id+ "')",{
  success: function(oData, response) {
    that.getView().setModel(oData, "");
  }
});

由此,数据始终是最新的。但是现在绑定有点不同了。

bindElement()绑定:

{
  "id": "1234",
  "propety1": "abc",
  // ...
}

绑定 setModel()id = 1234:

{
  "EntitySet('1234')": {
    "id": "1234",
    "propety1": "abc",
    // ...
  }
}

对于第一种方式,我的绑定如下所示:

<ObjectHeader title="{id}">

现在,它必须看起来像这样:

<ObjectHeader title="{/EntitySet('1234')/id}">

这里我遇到了一个问题,因为 id 的值(在本例中为 1234)总是不同的,因此绑定将不起作用。我不能直接绑定到 ObjectHeader,因为稍后我需要模型的一些属性。这就是我绑定到视图以便所有内容都可用的原因。

我的想法是在读取方法的成功方法中编辑绑定。我想删除周围的元素。你有什么想法,如何做到这一点?甚至一个simpler/better的想法来解决我的遗憾?

编辑: 我忘了提到 refresh 方法。这是可能的,但我必须把它放在哪里?我不想调用后端两次。

只需调用 API myODataModel<strong>.invalidateEntry(<em><key></em>)</strong> 在绑定上下文之前,以便检索最新数据。

// after $metadata loaded..
const model = this.getOwnerComponent().getModel("odata");
const key = model.createKey(/*...*/) //See 
model.invalidateEntry(key); // <-- before binding
this.getView().bindElement({
  path: "odata>/" + key,
  // ...
});

来自https://embed.plnkr.co/b0bXJK?show=controller/Detail.controller.js,preview


invalidateEntrydoc

Invalidate a single entry in the model data.

Mark the selected entry in the model cache as invalid. Next time a context binding or list binding is done, the entry will be detected as invalid and will be refreshed from the server.