Sapui5 JSONModel上的setProperty()未触发属性更改事件
我在控制器中使用了一个模型,并在该模型上设置了模型更改和属性更改事件函数,如下所示:Sapui5 JSONModel上的setProperty()未触发属性更改事件,sapui5,Sapui5,我在控制器中使用了一个模型,并在该模型上设置了模型更改和属性更改事件函数,如下所示: onInit: function() { var oData = { "Products": [ { "ProductID": 1, "ProductName": "Chai", "SupplierID": 1, "CategoryID": 1, "Q
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");
知道为什么吗?我的属性绑定是否正确?SAPUI5文档建议了一个描述属性值更改原因的原因参数。当您使用一些控件(如本例中的表)使用双向绑定更新模型时,将触发propertyChange事件,原因是sap.ui.model.ChangeReason.Binding。文档还指出,当前仅当属性绑定的值发生双向更改时才会触发该事件。因此,直接设置model属性不会触发事件
您可以在中查看事件>属性更改。当与控件一起使用时,reason参数和propertyChange事件确实可以正常工作……我已经阅读了您链接到的文档,现在更加困惑了。。。正如它在开始时明确指出的:“当模型中的属性值发生更改时,'propertyChange'事件被触发。”。哪里提到使用
setProperty()
不会触发属性更改事件?另外,我也乐于接受解决这个问题的最佳方法,即根据颜色选择器对话框中的选择,设置绑定到图标控件颜色值的模型属性的值“当前,事件仅在sap.ui.model.ChangeReason.Binding原因下激发,该原因在属性绑定的值发生双向更改时激发。“因此,当您更改控件属性时,您正在更改属性绑定值。但是,使用setProperty直接更改模型的属性并不表示绑定更改。按照我的理解,事件当前会以特定原因触发sap.ui.model.ChangeReason.binding
。。。但这并不意味着我就不应该。。。但我再次相信,在这种特殊情况下,文档可能会更清晰。还提到setProperty应将模型属性更改通知所有相关方。。。在我看来,这应该包括在模型上为此注册的事件处理程序。在任何情况下,对处理这一问题有何建议?扩展JSONModel以在我的案例中触发事件?