我有下一个结构
@@@ -460,22 -415,8 +460,22 @@@
在详细视图中我有一个列表:
<NavContainer id="navContainer" width="100%" height="100%">
<mvc:XMLView id="home_id" viewName="my.app.Home"/>
<mvc:XMLView id="detail_id" viewName="my.app.Detail"/>
</NavContainer>
当我想使用下面的代码获取此列表时,我得到一个&#34; Undefined&#34; :
<List
id="list_id"
width="85%"
visible="true">
...
...
</List>
我检查Dom的id是:
__ xmlview1 - detail_id - LIST_ID
有人可以帮助我吗?谢谢!
答案 0 :(得分:3)
由于您使用的是XML视图,因此控件get的ID前缀为创建它们的视图ID。这样,可以在不同视图中使用相同的ID。因此,列表的ID为:detail_id--list_id
(detail_id是您在嵌入视图时提供的ID)。同样,由于detail_id已嵌入XML视图中,因此父视图ID具有前缀。 with detail_id。完整的ID变为:__xmlview1--detail_id--list_id
。这里,__xmlview1
是框架自动生成的ID。在JS视图中,id永远不会加前缀,因此您可以使用以下方法:sap.ui.getCore().byId('id_here')
。但是,由于ID在XML视图中作为前缀,您需要使用以下方法:this.getView().byId('id_here')
,其中此是控制器,因此,我们使用View的byId方法,不是sap.ui.core库。
要解决您的问题,请使用以下代码:
this.getView().byId('detail_id').byId('list_id')
让我们打破这个:
1.首先获取包含列表的视图:因此使用View的byID方法(因为使用了XML视图),this.getView().byId('detail_id')
。
2.现在我们有详细视图,我们可以使用它来使用detail_view的byId方法获取列表。使用链接约定我们得到完整的代码:
this.getView().byId('detail_id').byId('list_id')
如果这清除了您的疑虑,请告诉我。 :)