gpt4 book ai didi

sapui5 - JSONModel 上的 setProperty() 不触发属性更改事件

转载 作者:行者123 更新时间:2023-12-05 07:40:17 32 4
gpt4 key购买 nike

我有一个在 Controller 中使用的模型,并在该模型上设置了模型更改和属性更改事件函数,如下所示:

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...
}

我已将模型绑定(bind)到一个表,一切正常...如果我更新属性,相关的模型更改和属性更改事件会触发。

但是,如果我使用类似下面的方法来更新属性,则只会触发 handleDataChanged 事件函数,而不是 handlePropertyChanged 事件函数:

oModel.setProperty("Products/0/ProductName", "SomeNewValue");

知道为什么吗?我的 PropertyBinding 是否正确?

最佳答案

SAPUI5 文档建议使用 reason 参数来描述属性值更改的原因。当您使用某些控件(如您案例中的表)使用双向绑定(bind)更新模型时,会触发 propertyChange 事件,原因是 sap.ui.model.ChangeReason.Binding。该文档还说该事件目前仅在属性绑定(bind)的值发生双向更改时才会触发。所以直接设置模型属性不会触发事件。

您可以在 API Reference for sap.ui.model.Model 中检查事件 > propertyChange

关于sapui5 - JSONModel 上的 setProperty() 不触发属性更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46311050/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com