如何在 MVC 模式中创建模型 Class 的实例 - SapUI5

How to create an instance of the Model Class in MVC Pattern - SapUI5

我目前正在尝试在我的 SAPUI5 / Fiori 项目中实现模型-视图-控制器。

我设法创建了一个控制器实例:new sap.ui.core.mvc.Controller('controller.js')

这不适用于模型(sap.ui.core.mvc 不包含模型属性)。

现在我正在寻找一种方法来从控制器调用模型的函数,以获取我的数据。

我已经尝试过这段代码:oObjModel = new sap.ui.mode.Model(),使用它我无法从我的模型中调用函数。

我建议您查看 SAPUI5 文档站点上的 walkthrough。它展示了如何以正确的方式初始化 MVC 的所有方面。


SAPUI5 中的模型有不同的 类 以支持不同形式的数据。比如有JSONModelXMLModelODataModel

所以要创建一个模型,首先需要确定你需要的具体模型类型,并使用其具体的构造函数。例如,如果您有 JSON 数据(或只是一个 JavaScript 对象),则使用 JSONModel:

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

请注意,以上代码假定您遵循推荐的模块使用方式,并且此代码用 sap.ui.define or sap.ui.require, where the module sap/ui/model/json/JSONModel is assigned to the variable JSONModel. The walkthrough 包裹显示了此正确的使用模式。不建议像下面这样直接访问构造函数:

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

您创建控制器的方式也不正确。您最好让视图通过提供一个 controllerName 来为您实例化控制器,如 walkthrough for Controllers.

所示
<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
});

请注意,这两个示例都是异步加载控制器的,如 synchronous XHR is being globally deprecated outside of Workers,因此框架建议您仅使用异步。事实上,新的加载方式甚至没有提供同步加载的选项。