在NavContainer中从XMLview获取元素

时间:2016-12-22 14:35:35

标签: javascript sapui5

我有下一个结构

@@@ -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

有人可以帮助我吗?谢谢!

1 个答案:

答案 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')

如果这清除了您的疑虑,请告诉我。 :)