如何在 XML 中绑定嵌套的 JSON 数据

Sop*_*hie 0 sapui5

我想绑定 JSON 数据来查看我尝试过的如下:

XML:

<m:Select id="Employee" items="{Employee>/EmployeeList}">
<c:Item key="{Employee>key}" text="{Employee>value}" />
<m:layoutData>
    <l:GridData span="L2 M2 S2"/>
</m:layoutData>
Run Code Online (Sandbox Code Playgroud)

这是我的 JSON 数据的方式:

 var xyz = {
    "Employee": {

        "EmployeeList": [{
                "key": "ram",
                "value": "ram"
            },
            {
                "key": "raj",
                "value": "raj"
            },
            {
                "key": "rani",
                "value": "rani"
            }
        ]
    }
}
var oModel = new sap.ui.model.json.JSONModel();
oModel.setData(xyz);
this.getView().setModel(oModel);
Run Code Online (Sandbox Code Playgroud)

我有一个选择框,我想在视图页面中将员工姓名显示为下拉列表。如何绑定这个 XML。提前谢谢

Mar*_*arc 5

有多种错误假设:

items="{Employee>/EmployeeList}"
Run Code Online (Sandbox Code Playgroud)

在这里,您假设您有一个名称Employee为顶级属性的模型EmployeeList

事实上,您有一个没有名称且具有顶级属性的模型Employee

您可以选择:

  • 改变你的绑定
  • 改变你的模型

选项 A:更改绑定:

如果您无法更改模型,这是您的选择(因为它以这种方式来自您的后端)。

从绑定中删除模型名称(因为您的模型没有名称)。为您的列表构建正确的路径。在 xyz 的顶部有一个属性Employee,它是一个具有属性的对象EmployeeList

<m:Select id="Employee" items="{/Employee/EmployeeList}">
    <c:Item key="{key}" text="{value}" />
    <m:layoutData>
        <l:GridData span="L2 M2 S2"/>
    </m:layoutData>
</m:Select>
Run Code Online (Sandbox Code Playgroud)

选项 B:更改模型

如果您对模型结构不满意并认为您的绑定有意义,您也可以更改模型。

首先,更改您的对象,以便 EmployeeList 是您的顶级结构:

 var xyz={   
   "EmployeeList":[  
      {  
        "key":"ram",
        "value":"ram"
      },
      {  
        "key":"raj",
        "value":"raj"
      },
      {  
        "key":"rani",
        "value":"rani"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

将模型设置为视图时,还要提供您期望在绑定中使用的名称:

this.getView().setModel(oModel, "Employee");
Run Code Online (Sandbox Code Playgroud)