更改事件未触发 JSONModel

Change event is not triggering for JSONModel

我有一个名为 resources 的模型,我需要监听更改事件,我已经附加了绑定,如下所示

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
});

通过像您在此处所做的那样使用 BindingContext 创建绑定

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

据我了解,您实际上创建了到 "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,具体取决于观看的 属性 是普通的 属性 还是数组。

那么,为什么您的 "change" 最初仍会触发?我猜 setData 只会触发所有更改侦听器,或者您的初始数据符合您不小心绑定的结构。

以上我还没有测试过。如果您提供一个 JSBin,那将是一件容易的事。

BR 克里斯