我当前正在尝试在我的SAPUI5 / Fiori项目中实现模型-视图-控制器。
我设法通过以下方式创建了控制器的实例:new sap.ui.core.mvc.Controller('controller.js')
这不适用于Model(sap.ui.core.mvc
不包含Model属性)。
现在,我正在寻找一种从Controller调用模型函数以获取数据的方法。
我已经尝试了以下代码:oObjModel = new sap.ui.mode.Model()
,使用该代码我无法从模型中调用函数。
答案 0 :(得分:1)
我建议您查看SAPUI5文档站点上的walkthrough。它显示了如何以正确的方式初始化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
。 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的形式异步加载控制器,因此该框架建议您仅使用异步。实际上,新的加载方式甚至没有提供同步加载选项。