Типы взаимодействия модели и интерфейса в SAPUI5 (Binding Modes)

Существует 3 типа взаимодействия:

  • One-Way — из модели данные передаются на view. При изменении модели, данные на представлении не меняются.
  • Two-Way —из модели данные передаются на view и из view обновляется модель. При изменении модели, данные на представлении меняются сразу.
  • One-Time — значение считывается только один раз, модель запрашивается только во время инициализации приложения.

Для наглядности создадим проект по шаблону. В контроллер представления abc.training.test4.controller.ViewMain добавим функцию onInit с моделью JSON и установим режим работы для модели OneWay:

 
 
  1. onInit: function() {
  2. // Ввод данных One-Way vs Two-Way Data Binding
  3.    var oData = {
  4.        country: "Россия",
  5.        region: "Татарстан",
  6.        city: "Нижнекамск"
  7.    };
  8.             
  9.    var oModel1 = new sap.ui.model.json.JSONModel(oData);
  10.    //var oModel1 = new sap.ui.model.json.JSONModel();
  11.    //oModel1.loadData("data/data.json");
  12.                   
  13.    // значение считывается из модели только один раз
  14.    // oModel1.setDefaultBindingMode(sap.ui.model.BindingMode.OneTime);
  15.    // из модели данные передаются на view
  16.    oModel1.setDefaultBindingMode(sap.ui.model.BindingMode.OneWay);
  17.    // из модели данные передаются на view и из view обновляется модель
  18.    //oModel1.setDefaultBindingMode(sap.ui.model.BindingMode.TwoWay);
  19.    this.getView().setModel(oModel1, "inputData");
  20. }

В представлении abc.training.test4.view.ViewMain выведем поля модели в элементах управления <Input>, <Label> и <Text>:

 
 
  1. <mvc:View controllerName="abc.training.test4.controller.ViewMain"
  2.       xmlns:html="http://www.w3.org/1999/xhtml"
  3.       xmlns:mvc="sap.ui.core.mvc"
  4.       displayBlock="true"
  5.       xmlns="sap.m"
  6.       xmlns:l="sap.ui.layout">
  7.       <App>
  8.         <pages>
  9.            <Page title="Адрес">
  10.               <content>
  11.                   <Label text="Страна" width="100%"/>
  12.                   <Input id="sCountry" width="100%" value="{inputData>/country}" valueLiveUpdate="true"/>
  13.                   <Label text="Регион" width="100%"/>
  14.                   <Input id="sRegion" width="100%" value="{inputData>/region}" valueLiveUpdate="true"/>
  15.                   <Label text="Город" width="100%"/>
  16.                   <Input id="sCity" width="100%" value="{inputData>/city}" valueLiveUpdate="true"/>
  17.                   <Text width="100%" text="Введенный адрес: {inputData>/country} {inputData>/region} {inputData>/city}"/>
  18.                   <Button text="Обновить значение модели из view (для One-Way)" press="onRefresh"></Button>
  19.               </content>
  20.            </Page>
  21.         </pages>
  22.       </App>
  23. </mvc:View>

Если посмотрим работу приложения, то увидим, что значение в <Text> не меняется. В представлении модель обновится только тогда, когда нажмем кнопку “Обновить значение модели из view (для One-Way)”, который запускает метод обновления данных в модели:

 
 
  1. onRefresh: function() {
  2.    var oModel1 = this.getView().getModel("inputData");
  3.    var lCountry = this.getView().byId("sCountry").getValue();
  4.    var lRegion = this.getView().byId("sRegion").getValue();
  5.    var lCity = this.getView().byId("sCity").getValue();
  6.    oModel1.setData({
  7.              country: lCountry,
  8.              region: lRegion,
  9.              city: lCity
  10.    });
  11. }

Binding Modes One-Way

Поменяем oModel1.setDefaultBindingMode(sap.ui.model.BindingMode.OneWay) на oModel1.setDefaultBindingMode(sap.ui.model.BindingMode.TwoWay).

Запустим приложение, при изменении поля ввода в <Input>, текст в <Text> будет меняться.

Вызов метода oModel1.setDefaultBindingMode(sap.ui.model.BindingMode.TwoWay) можно и не делать, так как значение по умолчанию для модели JSON стоит two-way.

Binding Modes Two-Way

Типы взаимодействия для моделей данных SAPUI5

Resource Model: one-time.

JSON Model: one-way, two-way, one-time. При создании модели по умолчанию ставиться тип two-way.

XML Model: one-way, two-way, one-time. При создании модели по умолчанию ставиться тип two-way.

oData Model: one-way, two-way, one-time. При создании модели по умолчанию ставиться тип one-way.

Изменение типа от стандартной настройки, производится вызовом метода setDefaultBindingMode().

Данный пример можно посмотреть и импортировать к себе в SAP Web IDE здесь:
abc.training.test4_.zip

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.