sapui5 component-preload.js文件问题

问题描述 投票:0回答:1

我正在开发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.jsmanifest.json中比我的const a更多的东西?

感谢。

javascript sapui5
1个回答
0
投票

您有几个选择。

通过各个定义:

第一个,似乎最符合您的原始想法的是,通过将其添加到组件/控制器/自定义控件的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}"

我倾向于使用最后一个选项,因为它不会加载额外的文件,并且所有应用程序都已包含清单。

© www.soinside.com 2019 - 2024. All rights reserved.