我有一个名为资源的模型,我需要收听我已附加绑定的更改事件,如下所示
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
});
答案 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.PropertyBinding
或sap.ui.model.ListBinding
,具体取决于监视的属性是普通属性还是数组。
那你为什么要改变"还是最初触发?我想setData只会触发所有更改侦听器,或者您的初始数据适合您意外绑定的结构。
我还没有测试过上述情况。如果你提供一个简单易用的JSBin。
BR 克里斯