【发布时间】:2017-02-24 17:42:44
【问题描述】:
我有一个在 SAP HANA 上运行的后端,它使用 xsodata 服务与前端通信(使用 SAP UI5 编码)。 xsodata服务输出数据格式如下:
{
"d": {
"results": [
{
"__metadata": {
"type": "music.Music_infoType",
"uri": "***/odata/music.xsodata/Music_info('10020')"
},
"ID": "10020",
"TITLE": "Music 1"
},
{
"__metadata": {
"type": "music.Music_infoType",
"uri": "***/odata/music.xsodata/Music_info('10026')"
},
"ID": "10026",
"TITLE": "Music 2"
}
}
在我的manifest.json 文件中,我将此信息加载到模型中:
"sap.app": {
...
"dataSources": {
"topmusics": {
"uri": "/path/to/odata/music.xsodata/Music_info",
"type": "JSON"
}
}
},
"sap.ui5": {
...
"models": {
"topmusics": {
"dataSource": "topmusics"
}
}
}
在 XML 视图中,我尝试传递一个参数来过滤前 5 首音乐并将数据加载到列表中。但是,由于数据不是从文件的“根”开始,而是从“d/results”开始(参见 json sn-p),我还必须传递此信息,这导致我得到以下代码:
<List headerText="Top 5 Musics"
items="{
path : 'topmusics>/d/results',
parameters : {
$top : '5'
}}"
class="sapUiResponsiveMargin">
<CustomListItem type="Navigation" press="onClick">
<Link text="{topmusics>TITLE}"
press="onClick" />
</CustomListItem>
</List>
但是,通过这段代码,我得到了完整的音乐列表,而不仅仅是前 5 名,这让我相信,因为我必须传递“/d/results”,所以 xsodata 参数 ("$top : '5'") 会被忽略。有什么办法可以做到吗?
在侧节点上,我没有在manifest.json 文件上设置"$top : '5'" 参数,因为我还希望能够将同一模型与其他xsodata 参数一起使用。
编辑:控制器代码:
onClick: function(oEvent) {
var oItem = oEvent.getSource();
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.navTo("musicDetails", {
musicPath: oItem.getBindingContext("topmusics").getPath().substr(11)
});
}
【问题讨论】:
标签: json data-binding odata sapui5