odata - 每次用户访问页面时如何刷新先前绑定的实体
问题描述
我刚刚遇到了一个不知道如何解决的问题。
背景:我有一个有两个视图的应用程序:
- 第一个输入数字,
- 第二个看细节。
视图切换到详细视图后,我会调用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
,因为稍后我需要模型中的一些属性。这就是我绑定到视图的原因,以便所有这些都可用。
我的想法是在 read 方法的成功方法中编辑绑定。我想删除周围的元素。你有一个想法,如何做到这一点?或者甚至更简单/更好的想法来解决我的遗憾?
编辑:
我忘了提refresh
方法。这是可能的,但我必须把它放在哪里?我不想调用后端两次。
解决方案
只需在绑定上下文之前调用 API 即可检索最新数据。myODataModel.invalidateEntry(<key>)
// after $metadata loaded..
const model = this.getOwnerComponent().getModel("odata");
const key = model.createKey(/*...*/) //See https://stackoverflow.com/a/47016070/5846045
model.invalidateEntry(key); // <-- before binding
this.getView().bindElement({
path: "odata>/" + key,
// ...
});
来自https://embed.plnkr.co/b0bXJK?show=controller/Detail.controller.js,preview
invalidateEntry
文档使模型数据中的单个条目无效。
将模型缓存中的选定条目标记为无效。下次完成上下文绑定或列表绑定时,该条目将被检测为无效并从服务器刷新。
推荐阅读
- c++ - 非平凡类型的模板类析构函数
- google-analytics - Google Analytics V4 - 一个页面上有两个具有相同 URI 的广告。如何拆分点击次数?
- charts - DevExpress - Chartcontrol - Agrupamento de Séries
- python-3.x - python manage.py runserver No module named projectname.settings 错误信息
- python - 如何将项目列表翻译成字典列表,其中项目作为字典元素
- laravel - 如何在不使用刀片的情况下在 Laravel 8 中发送纯文本电子邮件?
- javascript - 示例:甜甜圈 | 错误:未捕获的 ReferenceError:未定义 Utils
- java - 无法实例化 org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient 连接已关闭。我在 Windows 10 上尝试它。JDK8
- python - executemany() 正在将最后一行数据更新到表中的所有行
- python - 如何自动对 Django 表单字段进行排序