更改事件未触发 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.PropertyBinding
或 sap.ui.model.ListBinding
,具体取决于观看的 属性 是普通的 属性 还是数组。
那么,为什么您的 "change" 最初仍会触发?我猜 setData 只会触发所有更改侦听器,或者您的初始数据符合您不小心绑定的结构。
以上我还没有测试过。如果您提供一个 JSBin,那将是一件容易的事。
BR
克里斯
我有一个名为 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.PropertyBinding
或 sap.ui.model.ListBinding
,具体取决于观看的 属性 是普通的 属性 还是数组。
那么,为什么您的 "change" 最初仍会触发?我猜 setData 只会触发所有更改侦听器,或者您的初始数据符合您不小心绑定的结构。
以上我还没有测试过。如果您提供一个 JSBin,那将是一件容易的事。
BR 克里斯