标识组件rootview viewname

时间:2015-09-08 03:47:33

标签: sapui5

想象一个具有根视图的组件,如下所示:

rootView: 'myapp.view.App'

应用视图如下所示:

<mvc:View 
    xmlns:mvc="sap.ui.core.mvc" 
    xmlns:core="sap.ui.core" 
    xmlns="sap.m" 
    controllerName="myapp.controller.App" 
    displayBlock="true">
    <App id="myapp">
        <mvc:XMLView id="page1" viewName="myapp.view.Page1" />
    </App>
</mvc:View>

正如您所看到的,为此视图设置了一个控制器。视图myapp.view.Page1是另一个XML视图,具有自己的控制器并包含sap.m.Page控件。

Page1控制器无法访问任何控件,而在ID前面指定__xmlview0--。我知道它在视图中,因为App在视图中。 createId将创建相对于当前控制器的内容,因此它将返回__xmlview0--page1

例如,我可以从myapp.controller.Page获取应用,但我也必须使用视图名称进行访问。我的网页也是如此。导航到应用程序中的新页面如下所示:

var app = this.byId('__xmlview0--myapp');
app.to('__xmlview0--page1');

this.createId('myapp')会给我__xmlview0--page1--myapp

我还尝试将组件本身移出this.getOwnerComponent()并使用createIdgetId方法,但这使得__component0代替__xmlview0,所以这也是一个禁忌。

修改

不是一个超级清晰的故事。也许这会给你一些视觉效果:

-Component.js
    - App.view.xml <App id="myapp"></App>
          - Page1.view.xml <Page id="page1"></Page>
    - App.controller.js
    - Page1.controller.js
          //byId uses createId. 
          //myapp has id __xmlview0--myapp
          this.createId('myapp') = __xmlview0--page1--myapp
          this.getView().createId('myapp') = __xmlview0--page1--myapp
          this.getOwnerComponent().byId('myapp') = __component0--myapp
          this.getOwnerComponent().getView() is not a function

如何通过我的控制器确定添加__xmlview0?我使用哪种createId方法?我的rootView是错误的,是否有更有效的方法?如何从组件中获取myapp

1 个答案:

答案 0 :(得分:2)

由于您正在使用该组件,并且您在组件配置中提到了rootview,因此有一个用于检索根视图的API

var comp = this.getOwnerComponent().getMetadata() // this is the view i am referring to here.
comp.getRootView()

你可以写一个递归导航this.parent(),直到你的sViewName等于comp.getRootView()。
此条目获取您正在查找的根视图,然后sId获取您可以用来追加的ID。
我不确定你想要实现什么,但这是一个我认为可以用来获取rootview的ID的黑客。

或者,您也可以在定义类似

的组件时指定rootView ID
rootView: {
            viewName : "ui.sample.demo.view.App",
            id : "Root",
            type : "XML"
        },