比如,有一个sap.m.table,其项目绑定到JSON模型 - “/ rows”。在sap.m.table布局之外,有一个工具栏,其中包含“添加”按钮以向表中添加行。 “添加”按钮使用模型的setProperty方法向表中添加行。现在,要求是在JSON模型“/ rows”长度达到10时禁用“添加”按钮。我们如何创建一个处理程序来观察JSON模型的“/ rows”属性的变化? https://sapui5.netweaver.ondemand.com/1.52.22/#/api/sap.ui.model.Model/events/propertyChange声明当前事件只是因为sap.ui.model.ChangeReason.Binding而触发,当对属性绑定的值发生双向更改时会触发该事件。这意味着在调用JSONModel的setProperty()时,不会触发propertyChange的eventHandler。有没有办法我们可以观察到JSONModel属性更改的变化 - 在这种情况下,JSONModel的“/ rows”属性?
好吧,我可以想到几种方法来实现这一目标
视图
...
<Button text="Add" press="onPressAdd" enabled="{path: '/rows', formatter: '.isAddEnabled'}" />
...
控制器:
Controller.prototype.isAddEnabled = function(rows) {
return rows && rows.length < 10;
}
...
<Button text="Add" press="onPressAdd" enabled="{= ${/rows/length} < 10 }" />
...
您可以在JSONModel上调用bindProperty来创建可以观察到更改的属性绑定:
https://sapui5.hana.ondemand.com/#/api/sap.ui.model.Model/methods/bindProperty https://sapui5.hana.ondemand.com/#/api/sap.ui.model.json.JSONPropertyBinding
Controller.prototype.onInit = function() {
var model = this.getMyJsonModel();
var button = this.getView().byId("myButtonId");
model.bindProperty("/rows").attachChange(function(event) {
button.setEnabled(event.getSource().getValue().length < 10);
})
}