【发布时间】:2020-11-30 20:30:34
【问题描述】:
我有一个包含不同列的表 (sap.m.table)。一个列包含一个链接,当用户单击该链接时,会打开一个弹出片段并在列表 (sap.m.list) 中显示一些详细信息。数据来自 oData 服务。一个实体提供表格,并通过导航属性获取弹出框的数据。
我有一个适用于这种情况的工作示例,我在控制器中创建列表模板。但我相信这也应该可以通过控制器中的 xml 和 bindElement 来实现。我的第二种情况有什么错误?
第一个场景(工作正常): 弹出框 XML:
<Popover
showHeader="false"
contentWidth="320px"
contentHeight="300px"
placement="Bottom"
ariaLabelledBy="master-title">
<Page
id="master"
class="sapUiResponsivePadding--header"
title="Aktionen">
<List
id="AktionList">
</List>
</Page>
</Popover>
在控制器文件中调用Popover(sPath为/TableEntity('123456')/AktionSet):
if (!this._oPopover) {
Fragment.load({
id: "popoverNavCon",
name: "bernmobil.ZPM_STOERUNG_FDA.view.AktionPopover",
controller: this
}).then(function(oPopover){
this._oPopover = oPopover;
this.getView().addDependent(this._oPopover);
var oList = Fragment.byId("popoverNavCon", "AktionList");
var oItemTemplate = this._BuildItemTemplate();
oList.bindAggregation("items", sPath, oItemTemplate);
this._oPopover.openBy(oControl);
}.bind(this));
} else {
var oList = Fragment.byId("popoverNavCon", "AktionList");
var oItemTemplate = this._BuildItemTemplate();
oList.bindAggregation("items", sPath, oItemTemplate);
this._oPopover.openBy(oControl);
}
_BuildItemTemplate: function(){
var oItemTemplate = new sap.m.ObjectListItem({
title:"{AktionsBez}",
type: "Inactive"
});
oItemTemplate.addAttribute(new sap.m.ObjectAttribute({
text : "{Aktionstext}"
}));
oItemTemplate.addAttribute(new sap.m.ObjectAttribute({
text : "{path: 'ChangedAt', type: 'sap.ui.model.type.DateTime'}"
}));
return oItemTemplate;
}
这就是调用 oDataService 但不显示任何数据的第二种情况的想法: ObjectListItem 不仅在 XML 中定义,而且在 XML 中定义:
<List
id="AktionList"
items="{AktionSet}">
<ObjectListItem
title="{AktionsBez}"
type="Active">
<ObjectAttribute text="{Aktionstext}" />
<ObjectAttribute text="{ChangedAt}" />
</ObjectListItem>
</List>
并且在控制器中,而不是构建模板并执行 bindAggregation 只是:
var oList = Fragment.byId("popoverNavCon", "AktionList");
oList.bindElement(sPath);
如何获得在列表中显示数据的第二种方案?
【问题讨论】:
-
可能sPath不对,应该是"/AktionSet"