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

问题描述 投票:0回答:1

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

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
1个回答
0
投票

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

您可以在 sap.ui.model.Model 的 API 参考中查看事件 > propertyChange

© www.soinside.com 2019 - 2024. All rights reserved.