我目前正在使用 sap.m ,我将嵌套json 的数据绑定到 sap.m表时出现问题。
这是我的json文件的内容:
{
"courses": [
{
"req_id": "1",
"name" : "ABAP OO Basics",
"start" : "20-08-2014",
"end" : "22-08-2014",
"starttime": "10:00:00",
"endtime": "16:00:00",
"status": "Booked",
"room": "Room CDE",
"adress" : "Adress No.1",
"street": "Street No.1",
"zip_code": "74892142578485",
"city": "City No.1",
"country": "Country No.1",
"phone": "0595726764675435497436497",
"fax":"12",
"cap_min": "10",
"cap_opt": "20",
"cap_max": "30",
"img": "./res/1.jpg",
"content": "Test",
"participant": [{ "firstname": "Maik",
"lastname": "Maier",
"job": "installer",
"company": "muster"
},
{ "firstname": "Marco",
"lastname": "Schmidt",
"job": "installer",
"company": "schmitt"
},
{ "firstname": "Hans",
"lastname": "Mueller",
"job": "installer",
"company": "muster"
},
{ "firstname": "Matthias",
"lastname": "Gottlieb",
"job": "installer",
"company": "schmitt"
}]
}
]
}
这是创建我的表并绑定数据的代码:
var oTable = new sap.m.Table("idRandomDataTable", {
headerToolbar : new sap.m.Toolbar({
content : [ new sap.m.Label({
text : "Participant List"
}), new sap.m.ToolbarSpacer({}), new sap.m.Button("idPersonalizationButton", {
icon : "sap-icon://person-placeholder"
}) ]
}),
columns : [
new sap.m.Column({
width : "2em",
header : new sap.m.Label({
text : "Firstname"
})
}),
new sap.m.Column({
width : "2em",
header : new sap.m.Label({
text : "Lastname"
})
}),
new sap.m.Column({
width : "2em",
header : new sap.m.Label({
text : "Job"
})
}),
new sap.m.Column({
width : "2em",
header : new sap.m.Label({
text : "Company"
})
})
]
});
var oModel1 = new sap.ui.model.json.JSONModel();
var model = sap.ui.getCore().getModel();
var aData = model.getProperty("/courses");
oModel1.setData({
modelData : aData
});
oTable.setModel(oModel1);
oTable.bindItems("/modelData", new sap.m.ColumnListItem({
cells : [ new sap.m.Text({
text : {
path: "participant.'firstname'",
}
}), new sap.m.Text({
text : "{participant/lastname}"
}), new sap.m.Text({
text : "{participant}.{job}",
}), new sap.m.Text({
text : "{street}",
}),]
}));
我想绑定属性的内容&#34;参与者&#34; - 这是&#34;课程&#34;的子项。到了一个sap m table,我无法让它工作(我已经尝试了很多东西并且搜索了很长时间,但我找不到解决方案,在这种情况下我不知道如何访问json)。< / p>
这就是我在浏览器中看到的内容(您可以看到显示属性街道但是对于参与者我无法获取数据):
Firstname Lastname Job Company
[object Object], Street No.1
[object Object],
[object Object],
[object Object].
如果有人提示我的问题,这将是一个很好的帮助。
非常感谢,
问候,
安德烈亚斯
答案 0 :(得分:0)
你绑定了错误的路径。
oTable.bindItems("/modelData", new sap.m.ColumnListItem({
cells : [ new sap.m.Text({
text : "{/participant/firstname}"
}), new sap.m.Text({
text : "{/participant/lastname}"
}), new sap.m.Text({
text : "{/participant/job}",
}), new sap.m.Text({
text : "{/participant/company}",
}),]
}));
答案 1 :(得分:0)
首先,您没有发布所有代码。所以我做了几个假设,这些假设在你发布的内容中是有意义的:
您将JSON分配给核心上的默认(未命名)模型:
sap.ui.getCore().setModel(new sap.ui.model.json.JSONModel({
"courses": [
{
"req_id": "1",
...
});
如果你已经这样做了,那么你的代码就可以了:
var model = sap.ui.getCore().getModel();
var aData = model.getProperty("/courses");
oModel1.setData({
modelData : aData
});
所以现在我们谈到了问题的症结所在。您希望将表行绑定到您在JSON中显示的课程的参与者(第一个也是唯一的课程实例)。您需要知道绑定聚合(例如表的项)应该与数组相关,而不是(您做了什么)与对象相关。所以,如果你将它绑定到参与者属性,它指向一个数组...并且还能正确地获得绑定语法......你很好:
oTable.bindItems("/modelData/0/participant", new sap.m.ColumnListItem({
cells : [ new sap.m.Text({
text : {
path: "firstname",
}
}), new sap.m.Text({
text : "{lastname}"
}), new sap.m.Text({
text : "{job}",
}), new sap.m.Text({
text : "{company}",
}),]
}));