SimpleForm上的SAPUI5数据绑定

时间:2016-08-19 22:53:03

标签: data-binding odata sapui5 sap-fiori

我在尝试在简单表单上绑定数据时遇到问题。我正在使用模拟服务器并已成功将数据绑定到列表/表

我的manifest.json看起来像这样

"mock": {
    "dataSource": "mainService"
}

我的模拟数据(UserDetailsS​​et.json)看起来像这样

[{
    "ID_PassNum": "cu001",
    "Title": "Mr",
    "Name": "Don",
    "Surname": "Ownery",
    "ResType": "SA",
    "Country": "South Africa"
}]

我的SimpleForm字段看起来像这样

<Label text="Name" />
<Input value="{mock>/UserDetailsSet/0/Name}" />
<Label text="Surname" />
<Input value="{mock>/UserDetailsSet/0/Surname}"/>

我错过了什么?

2 个答案:

答案 0 :(得分:3)

您似乎正在使用ODataModel。在ODataModels中,对集合/聚合的绑定并不像使用JSONModel那样容易。您无法使用collection/index/property语法访问/绑定属性。

ODataModels如何存储数据

如果您加载一个像UserDetailSet这样的实体集,那么ODataModel中存储的数据就像这样:

{
  UserDetailSet('00001'): { ... },
  UserDetailSet('00002'): { ... },
  UserDetailSet('00003'): { ... },
  UserDetailSet('00004'): { ... }
}

然而&#39; 00001&#39;等等是实体的关键。如果在UserDetailSet上创建聚合绑定,则ODataListBinding将处理将上述数据转换为每个项目的上下文。

ODataModel上的属性绑定

您的绑定必须如下所示:

<Label text="Name" />
<Input value="{mock>/UserDetailSet('00001')/Name}" />
<Label text="Surname" />
<Input value="{mock>/UserDetailSet('00001')/Surname}"/>

ODataModel上的动态属性绑定

或者 - 更加动态 - 像这样绑定(注意:绑定现在是相对的,没有前导/):

<SimpleForm id="MyForm">
  <Label text="Name" />
  <Input value="{mock>Name}" />
  <Label text="Surname" />
  <Input value="{mock>Surname}"/>
</SimpleForm>

并在SimpleForm本身上动态使用bindElement

this.getView().byId("MyForm").bindElement({
  path: "/UserDetailSet('"+ sUserID +"')",
  model: "MyOdataModelID",
  // use OData parameters here if needed
  parameters: {
    "expand": "UserAdress"
  },
  // react on binding events here
  events: {
    change: function (oEv) { },
    dataRequested: function (oEv) { },
    dataReceived: function (oEv) {}
  }
});

BR 克里斯

答案 1 :(得分:0)

绑定应该是这样的

<Label text="Name" />
<Input value="{mock>Name}" />
<Label text="Surname" />
<Input value="{mock>Surname}"/>

如果它只是模拟中的一个对象。如果不工作,请将设置模型的控制器代码放在视图中