Sapui5 JSONModel未触发更改事件

Sapui5 JSONModel未触发更改事件,sapui5,jsonmodel,javascript-databinding,Sapui5,Jsonmodel,Javascript Databinding,我有一个名为resources的模型,我需要监听我附加了绑定的更改事件,如下所示 var resModel = this.getModel("resources"); var resBinding = new Binding(resModel, "resources>/resources", resModel.getContext("/resources")); resBinding.attachChange(this._resourceChanged.bind(this)); 当我按如

我有一个名为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");
请注意,
sap.ui.model.Binding
是抽象的,您可能需要使用
sap.ui.model.PropertyBinding
sap.ui.model.ListBinding
,这取决于监视的属性是普通属性还是数组

那么为什么你的“改变”最初仍然会触发呢?我猜setData只会触发所有更改侦听器,或者您的初始数据符合您意外绑定的结构

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


Chris

它与JSBin一起工作,但不在我的代码中,即使我使用setData而不是setProperty,它也不会触发我在代码中发现问题。。这是因为这是两个不同的对象,因为它没有触发。
new Binding(resModel, "resources>resources");