也许我不太理解 this.getView().getModel().refresh(true)
或 updateBindings
.. 不知怎的,它不会刷新模型,或者我的主要想法是错误的。我是说;我可以采取一种解决方法来调用再次读取 odata 服务的函数,但这并不是很漂亮。因此,我在 onInit
onInit: function () {
var that = this;
var oViewModel = new sap.ui.model.json.JSONModel({});
this.getView().setModel(oViewModel, "detailView");
sap.ui.getCore().setModel(oViewModel,"detailView");
var oFilter = [];
var zAppFilter = new sap.ui.model.Filter("XXX", sap.ui.model.FilterOperator.EQ, "XXXX");
oFilter.push(zAppFilter);
var oModel = that.getView().getModel();
oModel.setDefaultBindingMode("TwoWay");
oModel.read("/XXXXSet", {
filters: oFilter,
success: function (oData) {
that.getView().getModel("detailView").setData(oData.results);
},
// ...
});
},
我在 View 中使用此 "detailView"
-JSONModel 模型进行绑定(bind)。这是可行的。现在,添加或删除函数例如:
onDelete: function (oEvent) {
var that = this;
var oModel = this.getOwnerComponent().getModel();
var oSelectedItem = oEvent.getSource().getParent();
var oSourceID = oSelectedItem.getBindingContext("detailView").getObject().Zid;
oModel.remove("/XXX(XXX='XXX',XXXX='" + XXXX+ "')", {
method: "DELETE",
success: function(data) {
that.getView().getModel("detailView").refresh(true);
sap.ui.getCore().getModel("detailView").refresh(true);
},
// ...
});
},
这不起作用..但是为什么呢?我的意思是当我执行 updateBindings 或其他操作时。我理解错了还是做错了什么?
最佳答案
您的 JSONModel 未连接到任何东西。它只是一堆 JSON 数据。因此,如果你告诉它刷新,它应该如何知道从哪里获取新数据?
刷新
不做是获取新数据。
refresh
实际上所做的(在 JSONModel 中)是告诉绑定(bind)它有新数据。例如,这些绑定(bind)之一可以是 sap.m.List
的项目。然后列表知道它需要重新渲染以显示新数据。
如果您不获取新数据并调用刷新,则不会发生任何情况。实际数据还是一样。
i can do a workaround to call a function that reads agean the odata service but this is not really beautyfull
当您已经拥有完美的 ODataModel 时,使用额外的 JSONModel 一开始就不美观。如果您刚刚删除 JSONModel 并将 View 绑定(bind)到 ODataModel,则 View 将在调用 remove
后自动更新。
要将 View 绑定(bind)到 ODataModel,您可以从以下开始
<Table id="table0" items="{/XXXXSet}">
不要忘记从单元格中删除 detailView
。
关于sapui5 - 为什么模型刷新不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61217968/