Обработчик событий для изменения JSONModel?

#sapui5

#sapui5

Вопрос:

Скажем, есть sap.m.table, элементы которого привязаны к модели JSON — «/rows». Вне макета sap.m.table есть панель инструментов, которая содержит кнопку «Добавить» для добавления строк в таблицу. Кнопка «Добавить» добавляет строки в таблицу, используя метод setProperty модели. Теперь требуется отключить кнопку «Добавить», когда длина модели JSON «/ rows» достигла 10. Как нам создать обработчик для наблюдения за изменениями свойства «/ rows» JSON-модели? https://sapui5.netweaver.ondemand.com/1.52.22/#/api/sap.ui.model .Model/events/PropertyChange утверждает, что в настоящее время событие запускается только по причине sap.ui.model.Причина изменения.Привязка, которая запускается, когда происходят двусторонние изменения значения привязки свойства.Это означает, что обработчик событий PropertyChange не запускается при вызове setProperty() JSONModel . Есть ли выход, при котором мы можем наблюдать изменения изменений свойств JSONModel — в данном случае, свойства «/ rows» JSONModel?

Ответ №1:

Ну, я могу придумать несколько способов добиться этого

1. Привязка стандартного представления форматирование:

Вид

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

Контроллер:

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

2. Привязка выражений (чистый xml)

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

3. JSONPropertyBinding (чистый javascript)

Вы можете вызвать свойство BindProperty в JSONModel, чтобы создать привязку свойства, которую можно отслеживать для изменений:

https://sapui5.hana.ondemand.com/#/api/sap.ui.model.Модель / методы/Свойство 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);
    })
}
  

Комментарии:

1. Третий метод привязки к модели JSON, похоже, работает для добавления строк, но не при их удалении.