Я рекомендую вам ознакомиться с кратким описанием на сайте документации 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 глобально устарел за пределами рабочих , и поэтому фреймворк рекомендует использовать только асинхронный режим. Фактически, новый способ загрузки даже не предоставляет возможность синхронизации загрузки.