Data binding SimpleForm上的SAPUI5数据绑定

Data binding SimpleForm上的SAPUI5数据绑定,data-binding,odata,sapui5,sap-fiori,Data Binding,Odata,Sapui5,Sap Fiori,我在尝试将数据绑定到简单表单时遇到问题。我正在使用模拟服务器,并已成功地将数据绑定到列表/表 我的manifest.json如下所示 "mock": { "dataSource": "mainService" } [{ "ID_PassNum": "cu001", "Title": "Mr", "Name": "Don", "Surname": "Ownery", "ResType": "SA", "Country": "South Af

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

我的manifest.json如下所示

"mock": {
    "dataSource": "mainService"
}
[{
    "ID_PassNum": "cu001",
    "Title": "Mr",
    "Name": "Don",
    "Surname": "Ownery",
    "ResType": "SA",
    "Country": "South Africa"
}]
<Label text="Name" />
<Input value="{mock>/UserDetailsSet/0/Name}" />
<Label text="Surname" />
<Input value="{mock>/UserDetailsSet/0/Surname}"/>
我的mockdata(UserDetailsSet.json)如下所示

"mock": {
    "dataSource": "mainService"
}
[{
    "ID_PassNum": "cu001",
    "Title": "Mr",
    "Name": "Don",
    "Surname": "Ownery",
    "ResType": "SA",
    "Country": "South Africa"
}]
<Label text="Name" />
<Input value="{mock>/UserDetailsSet/0/Name}" />
<Label text="Surname" />
<Input value="{mock>/UserDetailsSet/0/Surname}"/>
我的SimpleForm字段如下所示

"mock": {
    "dataSource": "mainService"
}
[{
    "ID_PassNum": "cu001",
    "Title": "Mr",
    "Name": "Don",
    "Surname": "Ownery",
    "ResType": "SA",
    "Country": "South Africa"
}]
<Label text="Name" />
<Input value="{mock>/UserDetailsSet/0/Name}" />
<Label text="Surname" />
<Input value="{mock>/UserDetailsSet/0/Surname}"/>


我遗漏了什么?

绑定应该是这样的

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


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

您似乎正在使用
ODataModel
。在ODataModels中,针对集合/聚合的绑定不像使用JSONModel那么容易。您不能使用
集合/索引/属性
语法访问/绑定属性

ODataModels如何存储数据

如果加载类似于
UserDetailSet
的实体集,存储在ODataModel中的数据如下所示:

{
  UserDetailSet('00001'): { ... },
  UserDetailSet('00002'): { ... },
  UserDetailSet('00003'): { ... },
  UserDetailSet('00004'): { ... }
}
<Label text="Name" />
<Input value="{mock>/UserDetailSet('00001')/Name}" />
<Label text="Surname" />
<Input value="{mock>/UserDetailSet('00001')/Surname}"/>
而“00001”等是实体键。如果在
UserDetailSet
上创建聚合绑定,ODataListBinding将处理将上述数据转换为每个项目的上下文的操作

ODataModel上的属性绑定

您的绑定必须如下所示:

{
  UserDetailSet('00001'): { ... },
  UserDetailSet('00002'): { ... },
  UserDetailSet('00003'): { ... },
  UserDetailSet('00004'): { ... }
}
<Label text="Name" />
<Input value="{mock>/UserDetailSet('00001')/Name}" />
<Label text="Surname" />
<Input value="{mock>/UserDetailSet('00001')/Surname}"/>
并在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) {}
  }
});

克里斯你好,谢谢你的帮助。我试过你有约束力的建议,但没用。“将控制器代码放在将模型设置到视图的位置”的确切含义是什么。这就是你的意思还是怎么做的?:onInit:function{//View Controller this.getView.setModel('mock'))..谢谢好的,然后模拟模型有列表..然后更改为模拟>/0/name谢谢。已经尝试过了,但它不起作用。谢谢你的帮助。谢谢你的帮助。仍然不起作用,但感谢你的教育性回应。RegardsHi除了最初的帖子之外,我还有以下清单“数据源”:{“mainService”:{“uri”:“/here/goes/your/serviceUrl/”,“type”:“OData”,“settings”:{“annotations”:[],“odataVersion”:“2.0”,“localUri”:“localService/metadata.xml”“以及我的表单字段下面的一个列表,该列表实际显示基于模拟服务器的数据。我的视图控制器的init事件中没有代码。我尝试过这样的代码。getView().byId(“MyForm”).bindElement({path:”/UserDetailSet('00001'),model:“mock”})”关于所需UserDetail实体的密钥是否为“00001”?这只是我举的一个例子。如果您的密钥类型为integer,则为“/UserDetailSet(1)”或多属性密钥,例如“/UserDetailSet(ShopID='NY',UserID=1)”,感谢您与我一起旅行。