在SAPUI5中显示嵌套的JSON数据(sap.m表)

时间:2014-08-21 13:44:37

标签: 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",
   "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].

如果有人提示我的问题,这将是一个很好的帮助。

非常感谢,

问候,

安德烈亚斯

2 个答案:

答案 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}",
        }),]
    }));