为什么我的Component没有调用它的init方法?

时间:2015-04-13 10:43:54

标签: javascript sapui5

我有一个UIComponent,它具有不露面组件的依赖性。

主要组件元数据:

jQuery.sap.declare("MYAPP.Component");

sap.ui.core.UIComponent.extend("MYAPP.Component", {
  metadata: {
    dependencies: {
      libs: [],
      components: [
        "MYAPP.Component2"
      ]
    }, etc

该应用程序表明它已到达无面组件,因为如果我做了一些故意的语法错误,我会在加载网页时收到错误消息。我还可以从sap.ui.core.Component.extend()代码外部打印出console.log(" test")。

jQuery.sap.declare("Component2.Component");

console.log("outside test"); //this prints

sap.ui.core.Component.extend("Component2.Component", {
  metadata: {
  },

  init: function(){
    sap.ui.core.Component.prototype.init.apply(this, arguments);
    console.log("component2 init test"); //this doesn't print
  }

});

我的资源申报可能存在问题? 一些index.html:

<script id='sap-ui-bootstrap' type='text/javascript'
    src='resources/sap-ui-core.js'
    data-sap-ui-theme='sap_bluecrystal'
    data-sap-ui-libs='sap.m, sap.me'
    data-sap-ui-xx-bindingSyntax="complex"
    data-sap-ui-xx-supportedLanguages="en"
    data-sap-ui-resourceroots='{"MYAPP":"./"}'></script>

<script>
  sap.ui.localResources("view");
  sap.ui.localResources("utils");
  sap.ui.localResources("control");
  sap.ui.localResources("Component2");

我的文件夹结构:

MYAPP
  /Component2               //faceless component folder
    Component.js
  /view                     //views and controllers folder
  Component.js              //main component
  index.html

1 个答案:

答案 0 :(得分:0)

我在SCN(here)的用户的帮助下找到的答案是,父组件的元数据将调用一个函数来加载新组件而不实例化它。所以你必须明确地创建组件。

我在父组件的init()函数中添加了一个简单的sap.ui.component。

sap.ui.component({ name: "MYAPP.Component2" });

现在,在父组件之前加载并实例化新组件。希望这篇文章能帮助其他人使用不露面的组件,因为我在研究这个问题时自己发现了很少的文档。