在SAPUI5(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

我目前使用的是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}",
            }),]
        }));
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的迹象。但是您走的是正确的道路,您只需要确保为细节指定了正确的绑定上下文。