JSONModel未触发更改事件

时间:2016-08-03 09:01:50

标签: sapui5 jsonmodel javascript-databinding

我有一个名为资源的模型,我需要收听我已附加绑定的更改事件,如下所示

var resModel = this.getModel("resources");
var resBinding = new Binding(resModel, "resources>/resources", resModel.getContext("/resources"));
resBinding.attachChange(this._resourceChanged.bind(this));

当我将数据添加到模型中时,不会触发更改事件

var resources = this.getModel("resources").getProperty("/resources");
resources.push({
                 "res_num": 18,
                 "name": "New Added"
               });
this.getModel("resources").setProperty("/resources", resources);

但是,当我第一次将数据添加到模型时,它正在触发

this.resourceModel.setData({
  'resources': resources
});

1 个答案:

答案 0 :(得分:1)

通过像这里一样使用BindingContext创建Binding

new Binding(resModel, "resources>/resources", resModel.getContext("/resources"));

根据我的理解,您实际上创建了对"资源> / resources // resources"的绑定。使用BindingContext时,绑定路径应该是相对的(没有前导" /"):

new Binding(resModel, "resources>resources", resModel.getContext("/resources"));

但很可能你甚至不需要这里的上下文,所以这就足够了:

new Binding(resModel, "resources>resources");

请注意,sap.ui.model.Binding是抽象的,您可能需要使用sap.ui.model.PropertyBindingsap.ui.model.ListBinding,具体取决于监视的属性是普通属性还是数组。

那你为什么要改变"还是最初触发?我想setData只会触发所有更改侦听器,或者您的初始数据适合您意外绑定的结构。

我还没有测试过上述情况。如果你提供一个简单易用的JSBin。

BR 克里斯