在SAPUI5(sap.m表)中显示嵌套的JSON数据
我目前使用的是sap.m,我在将嵌套json的数据绑定到sap.m表时遇到问题 这是我的json文件的内容:在SAPUI5(sap.m表)中显示嵌套的JSON数据,json,mobile,data-binding,sapui5,Json,Mobile,Data Binding,Sapui5,我目前使用的是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
{
"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}",
}),]
}));
Firstname Lastname Job Company
[object Object], Street No.1
[object Object],
[object Object],
[object Object].
我想将属性“participant”(这是“courses”的子属性)的内容绑定到一个sap m表,但我无法让它工作(我尝试了很多方法,搜索了很长时间,但我没有找到解决方案,我不知道在这种情况下如何访问json)
这是我在浏览器中看到的(您可以看到显示了property street,但对于参与者,我无法获取数据):
如果有人对我的问题有任何提示,那将是一个很大的帮助
非常感谢
问候,
Andreas您绑定了错误的路径
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}",
}),]
}));
首先,您没有发布所有代码。因此,我做了一些假设,这些假设在您发布的内容中是有意义的: 您正在将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中显示的课程参与者(第一个也是唯一一个课程实例)。您需要知道,绑定聚合(如表的项)应该与数组相关,而不是(您所做的)与对象相关。因此,如果将其绑定到指向数组的participant属性。。。而且还要正确使用绑定语法。。。你很好:
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}",
}),]
}));
你好,艾伦,谢谢你的回复。我还通过复制和粘贴您的代码尝试了这个变体,但它不起作用,我得到了一个空表,没有显示任何数据。嗨,qmacro,谢谢您的好回答,我现在可以看到数据,但是如果我有多个课程,这是如何工作的,我在json中只设置了2个课程,但现在我总是显示两个课程的第一个课程的参与者。(很抱歉没有发布我所有的代码,但是它太多了)顺便说一句,我也阅读了这个主题,作者也绑定了子对象,但对我来说它不适用-。你没有询问多个课程,你发布的代码不允许这种情况。我们解决了你提出的具体问题。当然,这将是一个更高层次的要求,但你需要弄清楚你想如何显示东西;现在,您只有一个课程参与者的单一表格。我的方法是,我有一个sap m split应用程序,可以在其中选择课程,并在其他表格中获取课程的详细信息,每个课程的参与者都有一个表格。你说我的代码不允许这种情况是什么意思?我的json模型中有数据,因此必须能够正确显示它们?;)我是说你给我们看的代码不允许这样。没有splitapp的迹象。但是您走的是正确的道路,您只需要确保为细节指定了正确的绑定上下文。