【发布时间】:2017-05-22 15:48:07
【问题描述】:
我有两个数组:
一个包含我的数据:数组名称是arrayData
一个包含我的数据数组索引的索引
在我的 xml 视图中,我循环遍历我的 arrayIndex,我想显示 arrayData 中对应的行。
有可能吗?如果是的话,怎么办?
感谢和问候。
【问题讨论】:
我有两个数组:
一个包含我的数据:数组名称是arrayData
一个包含我的数据数组索引的索引
在我的 xml 视图中,我循环遍历我的 arrayIndex,我想显示 arrayData 中对应的行。
有可能吗?如果是的话,怎么办?
感谢和问候。
【问题讨论】:
这是一种巧妙的方法:将作业发送到您的 Formatter.js 函数。
我将绑定一个聚合,假设我扩展为某个 AddressSet:
<Table id="someTable"
items="{path: '/MainSet',
parameters :
{expand:'AddressSet'}
}"
growing="true" growingScrollToLoad="true"
>
然后在聚合中创建一个控件,在其中我将扩展的实体集发送到我的格式化程序
<Text
text="{
parts:[
{path: 'AddressSet'},
],
formatter: '.formatter.addressInSearchCatalog'
}"
>
然后,在格式化程序中,您会注意到展开的实体集只返回一个字符串,该字符串是对象的相对路径。使用此路径,我可以从我的 oData 模型访问该属性!显然,在 Javascript 中,我可以简单地从传递给格式化程序函数的数组中获取第一个(或第二个、或第五个或最后一个)数组项。
addressInSearchCatalog: function(otherSet){
var oModel = this._oCatalog.getModel();
var addressObj = oModel.getObject("/" + otherSet[0]);//use absolute binding
return(addressObj.HouseNumber + space + addressObj.Street + space + addressObj.City + ", " + addressObj.State + space + addressObj.Zip);
}
}
}
【讨论】:
您需要先将arrayData 合并到您的arrayIndex 中,因此您的结构可能如下所示:
{ arrayIndex: [
{ text: 'test1', arrayData: { otherText: 'testData2' } },
{ text: 'test2', arrayData: { otherText: 'testData2' } }
]}
现在您可以在表中使用表(sap.m 命名空间)。请务必在之前定义您的模型和模型名称。
<Table items="{arrayIndex>/}">
<columns>
<Column>
<Text text="Headline"/>
</Column>
</colums>
<items>
<ColumnListItem>
<cells>
<Text text="{arrayIndex>text}"/>
<Table items="{path: 'arrayIndex>arrayData', templateShareable:false}">
<columns class="backgroundBlue">
<Column>
<Text text="Headline arrayData"/>
</Column>
</columns>
<items>
<ColumnListItem>
<cells>
<Text text="{arrayIndex>otherText}"/>
</cells>
</ColumnListItem>
</items>
</Table>
</cells>
</ColumnListItem>
</items>
</Table>
您必须为第二张桌子使用{path: '...', templateShareable:false} 才能正常工作。
【讨论】: