JSONModel更改的事件处理程序?

问题描述 投票:0回答:1

比如,有一个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”属性?

sapui5
1个回答
1
投票

好吧,我可以想到几种方法来实现这一目标

1.标准视图绑定+格式化程序:

视图

...
<Button text="Add" press="onPressAdd" enabled="{path: '/rows', formatter: '.isAddEnabled'}" />
...

控制器:

Controller.prototype.isAddEnabled = function(rows) {
    return rows && rows.length < 10;
}

2.表达式绑定(纯xml)

...
<Button text="Add" press="onPressAdd" enabled="{= ${/rows/length} &lt; 10 }" />
...

3. JSONPropertyBinding(纯javascript)

您可以在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);
    })
}
© www.soinside.com 2019 - 2024. All rights reserved.