Скажем, есть таблица sap.m.table, элементы которой привязаны к модели JSON — «/rows». Вне макета sap.m.table есть панель инструментов с кнопкой «Добавить» для добавления строк в таблицу. Кнопка «Добавить» добавляет строки в таблицу с помощью метода setProperty модели. Теперь требуется отключить кнопку «Добавить», когда длина «/ rows» модели JSON достигает 10. Как мы создаем обработчик для наблюдения за изменениями свойства «/ rows» модели JSON? https://sapui5.netweaver.ondemand.com/1.52.22/#/api/sap.ui.model.Model/events/propertyChange утверждает, что В настоящее время событие запускается только с причиной sap.ui.model.ChangeReason.Binding, которая запускается, когда происходят двусторонние изменения значения привязки свойства. Это означает, что обработчик событий propertyChange не срабатывает при вызове setProperty() JSONModel. Есть ли выход, где мы можем наблюдать за изменениями свойств JSONModel — в данном случае это свойство «/rows» JSONModel?
Ну, я могу придумать несколько способов добиться этого
Вид
...
<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 }" />
...
Вы можете вызвать bindProperty для JSONМодель, чтобы создать привязку свойства, изменения которой можно наблюдать:
https://sapui5.hana.ondemand.com/#/api/sap.ui.model.Model/methods/bindPropertyhttps://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);
})
}
Третий метод привязки к модели JSON работает для добавления строк, но не для их удаления.