我有下一个结构
<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>
在详细 View 中我有一个列表,例如:
<List
id="list_id"
width="85%"
visible="true">
...
...
</List>
当我想使用下面的代码获取此列表时,我得到一个“未定义”:
sap.ui.getCore().byId("list_id");
我检查 Dom 的 id 是:
__xmlview1--detail_id--list_id
有人可以帮助我吗?谢谢!
最佳答案
由于您使用的是 XML View ,因此控件的 ID 将以创建它们的 View ID 为前缀。这样,相同的 Id 就可以在不同的 View 中使用。因此,您的列表的 ID 为:detail_id--list_id
(detail_id 是您在嵌入 View 时提供的 ID)。同样,由于detail_id 已嵌入XML View 中,因此父 View Id 带有前缀。与detail_id。因此完整的 ID 变为:__xmlview1--detail_id--list_id
。这里,__xmlview1
是框架自动生成的ID。在 JS View 中,id 永远不会添加前缀,因此您可以使用以下方法:sap.ui.getCore().byId('id_here')
。但是,由于 ID 在 XML View 中带有前缀,因此您需要使用以下方法:this.getView().byId('id_here')
,其中 this 是 Controller ,因此,我们使用的是 View 的 byId 方法,而不是 sap.ui.core 库的方法。
要解决您的问题,请使用以下代码:
this.getView().byId('detail_id').byId('list_id')
让我们来分解一下:
1. 首先获取包含列表的 View :因此使用 View 的 byID 方法(因为使用了 XML View ),this.getView().byId('detail_id')
。
2.现在我们有了详细 View ,我们可以使用detail_view的byId方法来获取列表。使用链接约定我们得到完整的代码:
this.getView().byId('detail_id').byId('list_id')
如果这能消除您的疑虑,请告诉我。 :)
关于javascript - 从 NavContainer 内的 XMLview 获取元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41285541/