我正在开发sapui5
应用程序。我在index.html
中有一个js文件data.js
,其中有const:
const a = 'x';
在index.html中,我导入了脚本:
<scrip src="resources/data.js">
在我的onInit()
的main.controller.js
功能中,我可以这样做:
var myvar = a; (a is "x")
我成功创建了组件预加载以提高性能。
我从data.js
中删除了index.html
的导入,因为我可以在chrome devtool调试器中以这种方式在component-preloaded.js const a
模块中看到我在data.js
中定义的data.js
:
"mynamespace/resources/data.js":"minify content of data.js";
这有效!我可以成功使用data.js的功能,但是可以在main.controller.js中使用:
var myvar = a;
我得到一个异常,“找不到引用,未定义,”在所有const,var和对象中都是相同的异常。
是什么问题?为什么用这种方式没有定义?
是否有必要在我的所有控制器中都定义component.js
或manifest.json
中比我的const a
更多的东西?
感谢。
您有几个选择。
通过各个定义:
第一个,似乎最符合您的原始想法的是,通过将其添加到组件/控制器/自定义控件的require调用中来包含它。您可能必须返回一个对象,而不是简单地声明变量,因为它避免了全局范围。
sap.ui.define([
"sap/ui/core/UIComponent",
"mynamespace/resources/data"
], function(UIComponent, myData) {
"use strict";
//use the content of myData any way you like
return UIComponent.extend("mynamespace.Component", {
};
};
我建议将其粘贴在JSON模型中,因此您也可以将其用作绑定。如果要使用JSON模型,则还有其他几种选择。
[首先是参考您的文件创建JSON模型。通常,您可以在组件文件中执行此操作。
new JSONModel("relative/path/to/data")
通过manifest.json
两种方式,一种作为文件,一种不具有其他文件
"models": {
"mydata": {
"type": "sap.ui.model.json.JSONModel",
"uri": "path/to/data.json",
}
}
如果不想通过ajax加载单独的文件,也可以将预定义的数据作为模型添加到清单中。请使用以下代码段:
"models": {
"mydata": {
"type": "sap.ui.model.json.JSONModel",
"settings": {
"myvar": "a"
}
}
}
这将创建一个包含settings
位中任何内容的JSON模型,因此在这种情况下,它将创建一个名为mydata
的模型,该模型具有一个对象,该对象的成员名为myvar
的值为a
,表示您可以使用通常的模型语法来提取它:
this.getOwnerComponent().getModel('mydata').getProperty('/myvar');
..或在视图的绑定中使用它
"{mydata>/myvar}"
我倾向于使用最后一个选项,因为它不会加载额外的文件,并且所有应用程序都已包含清单。