我有一个在控制器中使用的模型,并在该模型上设置了模型更改和属性更改事件函数,如下所示:
onInit: function() {
var oData = {
"Products": [
{
"ProductID": 1,
"ProductName": "Chai",
"SupplierID": 1,
"CategoryID": 1,
"QuantityPerUnit": "10 boxes x 20 bags",
"UnitPrice": "18.0000",
"UnitsInStock": 39,
"UnitsOnOrder": 0,
"ReorderLevel": 10,
"Discontinued": false
}
]
};
var oModel = new sap.ui.model.json.JSONModel();
oModel.setData(oData);
this.attachModelEventHandlers(oModel);
}
attachModelEventHandlers: function(oModel){
oModel.attachPropertyChange(this.handlePropertyChanged, this);
var binding = new sap.ui.model.PropertyBinding(oModel, "/", oModel.getContext("/"));
binding.attachChange(this.handleDataChanged, this);
},
handlePropertyChanged: function(oEvent) {
// Do whatever here...
}
handleDataChanged: function(oEvent) {
// Do whatever here...
}
我已将模型绑定到表,一切正常...如果我更新属性,则会触发相关的模型更改和属性更改事件。
如果我使用类似下面的内容来更新属性,则只有
handleDataChanged
事件函数会触发,而不是 handlePropertyChanged
事件函数:
oModel.setProperty("Products/0/ProductName", "SomeNewValue");
知道为什么吗?我的 PropertyBinding 正确吗?
SAPUI5文档建议使用原因参数来描述属性值更改的原因。当您使用某些控件(如您的案例中的表)通过两种方式绑定更新模型时,会触发 propertyChange 事件,原因是 sap.ui.model.ChangeReason.Binding。该文档还指出,当前仅当属性绑定的值发生两种方式更改时才会触发该事件。所以直接设置模型属性不会触发该事件。