我做了一个库项目,以便可以在应用程序之间共享格式化程序和一些自定义控件。这很好,只是将库添加到neo-app.json文件中。现在,我可以加载我的通用格式化程序:
app / neo-app.json
{
"path": "/resources/shared/",
"target": {
"type": "application",
"name": "mysharedlibrary",
"entryPath": "/"
},
"description": "My shared library"
}
Run Code Online (Sandbox Code Playgroud)
应用/控制器
sap.ui.define([
"shared/formatters"
], function(formatters) {
//etc
Run Code Online (Sandbox Code Playgroud)
然后,我想添加一个共享的基本控制器,该控制器已经设置了格式化程序。因此,我进入共享库项目并添加一个控制器,然后添加格式化程序:
mysharedlibrary / SharedController
sap.ui.define([
"sap/ui/core/mvc/Controller",
"formatters" /* <----- this is the problem */
], function(Controller, formatter) {
"use strict";
return Controller.extend("shared.SharedController", {
formatter: formatter
});
});
Run Code Online (Sandbox Code Playgroud)
然后在我的应用程序中使用它:
app / Controller.js
// fails. Shared base controller can't load formatter.
sap.ui.define([
"shared/SharedController"
], function(Controller) {
"use strict";
return Controller.extend("my.app.controller.App", {
});
});
Run Code Online (Sandbox Code Playgroud)
这种方法行不通。实现此控制器的应用程序可以找到该控制器,但是随后将格式化程序加载到共享控制器中似乎失败了,因为找不到它。我不确定如何使Shared Controller加载文件相对于其自身的路径而不是相对于实现应用程序的路径。
我在SharedController文件中放入什么来加载格式化程序?
sap.ui.define 支持声明相对于模块自身路径的依赖关系。
为方便起见,依赖项的名称可以以该段开头,该段
'./'将被包含当前定义的模块的软件包名称(相对名称)代替。最好的做法是在可能的情况下对依赖项使用相对名称。
在上述情况下,如果SharedController.js和formatters.js存储在同一文件夹中,则控制器的依赖关系如下所示:
sap.ui.define([
"sap/ui/core/mvc/Controller",
"./formatters"
], function(Controller, formatter) {
"use strict";
return Controller.extend("shared.SharedController", {
formatter: formatter
});
});
Run Code Online (Sandbox Code Playgroud)
如果位于上层目录中,则类似:"../formatters",等等。