如何在控制器中获取 SAPUI5 命名空间?

How to get SAPUI5 namespace in controller?

尊敬的 SAP Fiori 开发人员,

如何获取JavaScript类中的App命名空间?我的意思是,似乎在 data-sap-ui-resourceroots 内部的 index.html 中,我们静态定义了命名空间。如何在 Javascript 控制器 类 中访问此命名空间?

提前致谢。

您可以访问window["sap-ui-config"] resourceroots 的对象。请参阅 Configuration of the OpenUI5 Runtime

处的文档

您可以按照您的建议在 index.html 中定义您的资源根:

<script src="https://sapui5.netweaver.ondemand.com/1.38.12/resources/sap-ui-core.js" 
                id="sap-ui-bootstrap"
                data-sap-ui-libs="sap.m"
                data-sap-ui-theme="sap_belize"
                data-sap-ui-compatVersion="edge"
                data-sap-ui-preload="async" 
                data-sap-ui-resourceroots='{
                    "fiori": "./",
                    "abc": "../abc_web/lib/",
                    "def": "../def_web/"
                }'
                > 
        </script>

假设您需要在控制器(称为 App.controller.js)中使用来自 mathLib.js(位于 /abc_web/lib/mathLib.js 中)的某些函数。您可以通过以下方式访问它:

        sap.ui.define([ 
        "sap/ui/core/mvc/Controller",    
        "abc/mathLib", 

        ], function(Controller, CallItAsYouWant) {
           "use strict";    
           return Controller.extend("fiori.controller.App", {
              onInit: function () {
                 ...your code
                 CallItAsYouWant.someFunction();                     
              }
              ...

您可以将命名空间定义为常量值并在 component.js 中使用该常量:

var __NAMESPACE = "sap.ui.demo.toolpageapp.";
…
return UIComponent.extend(__NAMESPACE + "Component", {

这种替换适用于 javascript 编码和 javascript 视图。 它不适用于 xml 文件和清单文件。 还推荐 xml- 观看次数。

另一种选择是使用编辑器,您可以在其中同时搜索和替换应用的所有文件。

Fiori 应用程序没有使用 index.html 作为入口文件,它直接访问 Component.js。所以我的想法是从 manifest.json 获取命名空间。我选择了 rootView 描述符。

//any.controller.js
_getNamespace: function() {
    //namespace.App
    var oViewName = this.getOwnerComponent().getMetadata().getRootView().viewName;

    return oViewName.split(".")[0];
}