Как создать экземпляр класса модели в шаблоне MVC - SapUI5 - PullRequest
0 голосов
/ 28 октября 2019

В настоящее время я пытаюсь внедрить Model-View-Controller в моем проекте SAPUI5 / Fiori.

Мне удалось создать экземпляр контроллера с: new sap.ui.core.mvc.Controller('controller.js')

Это не работает для модели (sap.ui.core.mvc не содержит атрибут модели).

Сейчас я ищу способ вызова функций модели из контроллера, чтобы получить мои данные.

Я уже пробовал этот код: oObjModel = new sap.ui.mode.Model(), используя его, я не могу вызывать функции из моей модели.

1 Ответ

1 голос
/ 28 октября 2019

Я рекомендую вам ознакомиться с кратким описанием на сайте документации SAPUI5. В нем показано, как правильно инициализировать все аспекты MVC.


Модели в SAPUI5 имеют разные классы для поддержки разных форм данных. Например, есть JSONModel, XMLModel, ODataModel и т. Д.

Итак, чтобы создать модель, вам нужно сначала определить конкретный тип модели, который вам нужен, и использовать ее конкретный конструктор. Например, если у вас есть данные JSON (или просто объект JavaScript), вы используете JSONModel:

var yourData = { "hello": "world" };
var oModel = new JSONModel(yourData);

Обратите внимание, что в приведенном выше коде предполагается, что вы следуете рекомендованному путииспользовать модули и чтобы этот код был заключен в sap.ui.define или sap.ui.require, где модуль sap/ui/model/json/JSONModel назначен переменной JSONModel. В пошаговом руководстве показана правильная схема использования. Прямой доступ к конструктору, как показано ниже, не рекомендуется:

// Also probably works, but not the recommended way
var oModel = new sap.ui.model.json.JSONModel(yourData);

Ваш способ создания контроллера также не верен. Вы должны предпочтительно позволить представлению создать экземпляр контроллера для вас, предоставив ему controllerName, как показано в пошаговом руководстве для контроллеров .

<mvc:View xmlns="sap.m" xmlns:mvc="sap.ui.core.mvc" controllerName="name.of.your.controller">
    <!-- ... -->
</mvc:View>

Если вам нужно создать экземпляр контроллера вручнуюиз кода используйте это:

Controller.create({ name: "name.of.your.controller" }).then(function(oController) {
    // Do something with oController
});

Это снова предполагает, что у вас есть модуль sap/ui/core/mvc/Controller, связанный с переменной Controller.

До версии 1.56, вы можете использовать устаревшую версиюsap.ui.controller вместо этого используется функция для создания контроллеров:

sap.ui.controller("name.of.your.controller", null, /*async=*/true).then(function(oController) {
    // Do something with oController
});

Имейте в виду, что оба из этих примеров загружают контроллер асинхронно, поскольку синхронный XHR глобально устарел за пределами рабочих , и поэтому фреймворк рекомендует использовать только асинхронный режим. Фактически, новый способ загрузки даже не предоставляет возможность синхронизации загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...