首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标识组件rootview视图名称

标识组件rootview视图名称
EN

Stack Overflow用户
提问于 2015-09-08 03:47:33
回答 1查看 6.4K关注 0票数 1

假设一个组件具有如下的根视图:

代码语言:javascript
复制
rootView: 'myapp.view.App'

应用程序视图如下所示:

代码语言:javascript
复制
<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控件。

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

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

代码语言:javascript
复制
var app = this.byId('__xmlview0--myapp');
app.to('__xmlview0--page1');

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

我还尝试将组件本身从this.getOwnerComponent()中取出,并使用createIdgetId方法,但这使我只能使用__component0而不是__xmlview0,所以这也是不可行的。

编辑

不是一个非常清楚的故事。也许这会给你带来一些视觉效果:

代码语言:javascript
复制
-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从组件中取出?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-08 14:22:44

由于您使用的是组件,并且组件配置中提到了rootview,所以有一个API来检索根视图。

代码语言:javascript
复制
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,如下所示

代码语言:javascript
复制
rootView: {
            viewName : "ui.sample.demo.view.App",
            id : "Root",
            type : "XML"
        },
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32448971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档