问题 
也许我真的不明白 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);
 
 -     },
 
 -     // ...
 
 -   });
 
 - },
 
  复制代码 
我使用这个“detailView”; -JSONModel 在视图中用于绑定。这很好用。 .现在,添加或删除函数,例如: 
- 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 中)所做的是告诉绑定它有新数据。例如,其中一个绑定可以是 sap.m.List 的一项。然后列表知道需要重新提交以显示新数据。 
 
如果您没有获取新数据并调用刷新,则不会发生任何事情。实际数据保持不变。 
 
如果您已经有一个完美的 ODataModel,那么首先使用一个额外的 JSONModel 并不是很好。如果您刚刚移除 JSONModel 并将视图绑定到 ODataModel,则调用 remove 后视图将自动更新。 
- <Table id="table0" items="{/XXXXSet}">
 
 - Don't forget to remove detailView from your cells.
 
 
  复制代码 
要将视图绑定到 ODataModel,您可以从 
 
 
 
 |