我正面临以下问题。我有一个片段:
<core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core" xmlns:layout="sap.ui.layout" >
<Dialog title="Hints" class="sapUiPopupWithPadding" contentWidth="60%">
<content>
<Table id="tblHintList" mode="SingleSelect" items="{HintList>/}" growing="true" growingThreshold="10" selectionChange="onGetSelectedHints">
</Table>
</content>
</Dialog>
</core:FragmentDefinition>
在我的控制器中,我想通过ID访问Table,如下所示:
var table = this.getView().byId("tblHintList");
即使我调用this.getView().addDependent(Fragment)
并且数据绑定正在运行,这也无法正常工作。
如何访问片段中定义的控件?
答案 0 :(得分:1)
通常,您必须区分这些use cases:片段是您视图的一部分。您正在使用或不使用ID来实例化您的片段。
在您的情况下,片段不是视图的一部分,因为它是一个对话框。在这种情况下,您将获得表控件,如下所示:
var table = sap.ui.getCore().byId("tblHintList");
假设您使用ID“myDialog”来实例化片段,如下所示:
var dialog = sap.ui.xmlfragment("myDialog", "my.package.HintListDialog");
然后你获得你的表格控件如下:
var table = sap.ui.core.Fragment.byId("myDialog", "tblHintList");
一般情况下,你应该不自己组装控件ID,如前面的答案所示。
答案 1 :(得分:0)
this.getView().byId()
无效,因为您的片段在实例化时未提供视图的ID。所以,让我们假设我有一个片段:HelloDialog。
<core:FragmentDefinition
xmlns="sap.m"
xmlns:core="sap.ui.core" >
<Dialog>
<content>
<List id='myId'
noDataText="No Products Found"
title="Uraian"
search="handleSearch"
confirm="handleClose"
close="handleClose"
items="{
path: 'list>/'
}" >
<StandardListItem
title="{list>Name}"
description="{list>ProductId}"
iconDensityAware="false"
iconInset="false"
type="Active" />
</List>
</content>
</Dialog>
</core:FragmentDefinition>
我将以两种不同的方式实例化它(记住列表的ID是:myId)
实例化时没有任何ID:代码:
oDialog = sap.ui.xmlfragment(&#34; testbed.HelloDialog&#34;); oView.addDependent(oDialog);
现在,如果您要检查DOM,列表的ID将只是myId
。
因此,要在这些案例中获取ID,请使用:sap.ui.getCore().byId('myId').
使用ID实例化代码:
oDialog = sap.ui.xmlfragment('fragmentId', "testbed.HelloDialog");
oView.addDependent(oDialog);
现在,如果您要检查DOM,列表的ID将为:fragmentId--myId
。
在这里,您可以再次使用sap.ui.core.Fragment.byId("fragmentId", "myId");
; //感谢matbtt
现在,如果我将与我的片段一起使用的视图ID关联起来,即:
var oView = this.getView();
var oDialog = oView.byId("helloDialog");
// create dialog lazily
if (!oDialog) {
// create dialog via fragment factory
oDialog = sap.ui.xmlfragment(oView.getId(), "testbed.HelloDialog");
oView.addDependent(oDialog);
}
DOM中的列表ID:viewId--myId
现在,我可以使用我的this.getView().byId()
作为this.getView().byId()
,只需添加视图ID,然后搜索控件。
P.S:你可以使用this.byId()
而不是this.getView().byId()
(这指的是控制器)。