Модели и привязка данных в SAPUI5 (Models and Databinding).

SAPUI5 поддерживает концепцию MVC (Model-View-Controller ). Рассмотрим модели данных (Models) и их привязку к визуальным компонентам (View).  Модель предоставляет доступ к данным различных форматов.

SAPUI5 предоставляет следующие предопределенные модели:

  • XML Model. Клиентская модель. Данные содержатся в файле xml. Для маленьких наборов данных, которые полностью доступны клиенту.
  • JSON Model. Клиентская модель. Данные содержатся в файле json. Отличается от XML модели только форматом предоставления данных.
  • oData Model. Серверная модель. Привязка элементов управления к данным из служб oData. Набор данных доступен только на сервере, а клиент получает данные по запросу.
  • Resource Model. Предназначен в основном для обеспечения текстов на разных языках, для разработки многоязычных интерфейсов, локализации приложений.

Инициализация и привязка модели данных в проектах SAPUI5

При установке модели надо различать некоторые моменты:

  1. Установка модели глобально для всего приложения:
    sap.ui.getCore().setModel(oModel2);
  2. Установка модели глобально с присвоением имени:
    sap.ui.getCore().setModel(oModel2, “model_2“);
  3. Установка модели для всего представления (view):
    this.getView().setModel(oModel2, “model_2”);
  4. Установка модели напрямую для элемента:
    sap.ui.getCore().byId(“idMain–itext”).setModel(oModel3);

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

XML Модель.

В проект добавим xml файл dataxml.xml со следующими данными:

 
 
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <root>
  3. <select>
  4. <element id="1">
  5. <City>Москва</City>
  6. </element>
  7. <element id="2">
  8. <City>Казань</City>
  9. </element>
  10. <element id="3">
  11. <City>Нижнекамск</City>
  12. </element>
  13. </select>
  14. </root>

В контроллере вьюшки abc.training.test3.controller.ViewMain в процедуре onInit подключим модель:

 
 
  1. var oModel2 = new sap.ui.model.xml.XMLModel();
  2. oModel2.loadData("data/dataxml.xml");
  3. this.getView().setModel(oModel2, "model_2");

Если набор данных компактен и мал, то создавать xml файл не нужно. Вместо метода loadData, воспользуйтесь методом setXML:

 
 
  1. var oModel2 = new sap.ui.model.xml.XMLModel();
  2. oModel2.setXML("<root><select><element><City>Москва</City></element><element><City>Казань</City></element><element><City>Нижнекамск</City></element></select></root>");
  3. this.getView().setModel(oModel2, "model_2");

В представлении abc.training.test3.view.ViewMain выводим XML модель данных в элементе управления <List>:

 
 
  1. <List id="list2" headerText="Города (данные из формата XML)" items="{model_2>/select/element/}">
  2. <StandardListItem title="{model_2>City}" description="{model_2>@id}"/>
  3. </List>

При работе с xml моделью, надо помнить, что первый элемент <root> в пути не участвует!


Результат работы приложения:

xml model binding

JSON Модель.

В проект добавим JSON файл data.json с данными:

 
 
  1. {
  2. "select":
  3.       [
  4.             { "City": "Москва" },
  5.             { "City": "Казань" },
  6.             { "City": "Нижнекамск" }
  7.       ]
  8. }

В контроллере представления abc.training.test3.controller.ViewMain в процедуре onInit подключим модель с другим именем:

 
 
  1. var oModel1 = new sap.ui.model.json.JSONModel();
  2. oModel1.loadData("data/data.json");
  3. sap.ui.getCore().setModel(oModel1, "model_1");

В представлении abc.training.test3.view.ViewMain выводим JSON модель данных в элементах управления <List> и <Text>:

 
 
  1. <List id="list1" headerText="Города (данные из формата JSON)" items="{model_1>/select}">
  2.     <items>
  3.         <StandardListItem title="{model_1>City}" description=""/>
  4.     </items>
  5. </List>
  6. <Text text="{model_1>/select/0/City/}"/>
  7. <Text text="{model_1>/select/1/City/}"/>
  8. <Text text="{model_1>/select/2/City/}"/>

Результат работы приложения с моделью данных JSON:

json model binding

Resource Модель.

При создании проекта по шаблону, создается папка i18n с файлом i18n.properties. В этом файле текстовые данные для локализации вашего проекта под английский язык. Для того, чтоб добавить поддержку русского интерфейса, создадим методом копирования новый файл i18n_ru.properties.

В контроллере представления abc.training.test3.controller.ViewMain в процедуре onInit подключим ресурсную модель:

 
 
  1. var oResourceModel = new sap.ui.model.resource.ResourceModel({
  2.     bundleName : "abc.training.test3.i18n.i18n"
  3.     });
  4. sap.ui.getCore().setModel(oResourceModel, "i18n");

SapUI5 сам понимает какой языковой файл загрузить в зависимости от настроек браузера, вашего языка региона.

Во вьюшке abc.training.test3.view.ViewMain для элемента <List> создадим соединение для данных {i18n>jsontitle}:

 
 
  1. <List id="list1" headerText="{i18n>jsontitle}" items="{model_1>/select}">
  2.    <items>
  3.        <StandardListItem title="{model_1>City}" description=""/>
  4.    </items>
  5. </List>

В файл i18n_ru.properties добавим имя jsontitle=Города (данные из формата JSON):

 
 
  1. title=Подключение данных
  2. appTitle = Приложение тестирования DataBinding
  3. appDescription=рассматриваем различные методы подключения данных
  4. #XHED:
  5. jsontitle=Города (данные из формата JSON)

Результат работы приложения (Можно задать язык загрузки, добавив параметр sap-ui-language=RU в url.):

resource model binding

oData Модель.

Серверная модель данных. Сервис oData будет возвращать наборы данных по запросам пользователя. Подключается в контроллере представления abc.training.test3.controller.ViewMain, в процедуре onInit:

 
 
  1. onInit: function() {
  2.     var sUrl = "/sap/opu/odata/sap/ZCO_BUDGETFS_SRV/";
  3.     var oModel = new ODataModel(sUrl, {
  4.         useBatch: false
  5.         });
  6. this.getView().setModel(oModel);
  7. }

Весь процесс подключения и вывода данных представлен в этом примере “Подключение oData сервиса в проект SAPUI5 в SAP Web IDE“.

Удачи в изучении SAPUI5! Будут вопросы, пишите в комментариях!

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

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

 

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