javascript - 如何在 MVC 模式中创建模型类的实例 - SapUI5
问题描述
我目前正在尝试在我的 SAPUI5 / Fiori 项目中实现模型-视图-控制器。
我设法创建了一个控制器实例:new sap.ui.core.mvc.Controller('controller.js')
这不适用于模型(sap.ui.core.mvc
不包含模型属性)。
现在我正在寻找一种从控制器调用模型函数的方法,以获取我的数据。
我已经尝试过这段代码:oObjModel = new sap.ui.mode.Model()
,使用它我无法从我的模型中调用函数。
解决方案
我建议您查看SAPUI5 文档站点上的演练。它展示了如何以正确的方式初始化 MVC 的所有方面。
SAPUI5 中的模型有不同的类来支持不同形式的数据。例如,有JSONModel
、XMLModel
、ODataModel
等。
所以要创建模型,首先需要确定自己需要的模型的具体类型,并使用其具体的构造函数。例如,如果你有 JSON 数据(或者只是一个 JavaScript 对象),你可以使用JSONModel
:
var yourData = { "hello": "world" };
var oModel = new JSONModel(yourData);
请注意,上面的代码假定您遵循推荐的使用模块的方法,并且此代码用sap.ui.define
or包装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 在 Workers 之外已被全局弃用,因此框架建议您仅使用异步。事实上,新的加载方式甚至没有提供同步加载的选项。
推荐阅读
- javascript - 点击按钮提交表格
- jquery - 如何计算顶部距离以将标题定位在另一个 div 之上?
- mysql - 如何将系统的日期插入表中
- angular - 防止组件在 DOM 中移动时被重置
- azure-devops - Yaml 步骤的名称无效
- python - 如何使用 ListView 构建此登录页面
- laravel - 带有 Spatie 权限检查的 Laravel 策略为客户端凭据 API 请求提供 403
- python - 在 dask 中生成批量图像
- xcode - 如何导出(从 Blender)和将 Alembic 文件导入 Xcode
- scala - 使用 Junit 运行 spark 作业时如何生成 XML 测试结果报告?