如果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
}
});
答案 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”属性,在其中应提供检查方法。