SAPUI5:如果ODataModel发生变化,如何获取事件通知?

时间:2014-11-07 10:25:40

标签: event-handling odata sapui5

如果ODataModel(在客户端)将被更改,我正在搜索将被抛出的事件。 问题是,在我的应用程序中有许多能够编辑模型的不同字段。 如果是模型更改,我会注册一个启用“保存”按钮的功能。 “保存”按钮将调用模型的submitChanges()(我使用TwoWayBinding模式)。

目前我只检测到“hasPendingChanges()”方法,但没有我可以注册的事件。

处理此问题的建议解决方案是什么?

要处理每个“输入”控件的更改看起来不是一个好方法,因为很容易忘记某些字段(至少如果其他人将维护代码)。

我目前的解决方案现在看起来与此类似:

sap.ui.model.odata.ODataModel.extend("MyModel", {
  setProperty : function(sPath, oValue, oContext) {
  sap.ui.model.odata.ODataModel.prototype.setProperty.apply(this, [sPath, oValue, oContext]);
  // do something here
  }
});

2 个答案:

答案 0 :(得分:8)

您可以使用sap.ui.model.Binding.attachChange()

var binding = new sap.ui.model.Binding(model, "/", model.getContext("/"));
binding.attachChange(function() {
    saveButton.setVisible(true);
    saveButton.setEnabled(true);
    //or anything else
});

每次模型更改时都会调用该函数,例如。致电model.setProperty(key, value)

https://openui5.netweaver.ondemand.com/#docs/api/symbols/sap.ui.model.Binding.html

答案 1 :(得分:0)

我建议用它代替模型(正如您所说的多次), 在每个具有绑定的控件中调用它,并使用“ change”属性,在其中应提供检查方法。