假设一个组件具有如下的根视图:
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控件。
如果不在Id前面指定Page1,则此Page1控制器无法访问任何控件。我知道它在视图中,因为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()中取出,并使用createId和getId方法,但这使我只能使用__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从组件中取出?
发布于 2015-09-08 14:22:44
由于您使用的是组件,并且组件配置中提到了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"
},https://stackoverflow.com/questions/32448971
复制相似问题