如何加载与定义模块相关的依赖关系

Jor*_*org 2 sapui5

我做了一个库项目,以便可以在应用程序之间共享格式化程序和一些自定义控件。这很好,只是将库添加到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文件中放入什么来加载格式化程序?

Bog*_*ann 5

sap.ui.define 支持声明相对于模块自身路径的依赖关系。

为方便起见,依赖项的名称可以以该段开头,该段'./'将被包含当前定义的模块的软件包名称(相对名称)代替。

最好的做法是在可能的情况下对依赖项使用相对名称。

在上述情况下,如果SharedController.jsformatters.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",等等。