javascript - 从 NavContainer 内的 XMLview 获取元素

标签 javascript sapui5

我有下一个结构

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

相关文章:

javascript - 在Javascript中单击div后如何显示div中的内容?

javascript - 按键排序对象数组

javascript - 删除字符串中的空格、特殊字符并将其转换为小写

sapui5 - 即使从模型更新了控件属性,也未触发控件事件

javascript - 滚动时表 "keeps"中同一行编辑数字中的输入字段(JSView)

javascript - ionic : how to detect bottom scroll?

javascript - 如何等待 axios 调用完成

javascript - 限制文本框中第一个位置的零

sapui5 - sap.ui.table.Table "VisibleRowCountMode.Auto"模式不起作用

treeview - 在 sap.m.Tree 中仅显示 JSON 模型的一部分