sapui5 - 为什么模型刷新不起作用?

标签 sapui5

也许我不太理解 this.getView().getModel().refresh(true)updateBindings.. 不知怎的,它不会刷新模型,或者我的主要想法是错误的。我是说;我可以采取一种解决方法来调用再次读取 odata 服务的函数,但这并不是很漂亮。因此,我在 onInit

中读取了 Model
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/

相关文章:

javascript - SAPUI5 表上的绑定(bind)行

sapui5 - 将图像/图标添加到单选按钮

sapui5 - v2.ODataModel : which API is more preferred? "bindElement"或 "read"?

javascript - 在 Openui5 中按项目触发函数

javascript - 无法使用 ui5/javascript 将图像添加到电子邮件中

data-binding - 自定义控件的 SAPUI5/OpenUI5 数据绑定(bind)

sapui5 - SAPUI5 中的 HTTP 方法

sapui5 - 在单个表中使用两个实体集

javascript - 如何删除 SAPUI5 应用程序中对 'library-preload.json' 的可选调用?

sapui5 - getBindingContext() 返回未定义