如何在 SAPUI5 中使用 OdataModel 将属性与集合绑定
How to bind properties with the collection Using OdataModel in SAPUI5
大家好,我需要你的帮助。
使用 Mockserver 我可以像这样访问 zu OData
var oModel = this.getOwnerComponent().getModel("oServiceModel");
var sReservationPath = "/Book_Regal(Bibliothek='BE1',ReservationNr='4162')/Reserve_Book";
我这样绑定我的表单:
var formA = this.getView().byId("FormA");
formA.setModel(oModel, "Bibliothek");
formA.bindElement({path: "/Reserve_Book(Bibliothek='BE1',ReservationNr='4162')", model: "Bibliothek"});
我的 MockData(BookReserved.json) 看起来像这样:
[
{
"results": [
{
"__metadata": {
"id": "http://MyWebService/Reserve_Book(BibliothekName='BE1',ReservationNr='4162')",
"uri": "http://MyWebService/Reserve_Book(BibliothekName='BE1',ReservationNr='4162')",
"type": "infos.Reserve_BookType"
},
"iScomfirmed": true,
"BibliothekName": "BE1",
"ReservationNr": "4162",
"BookType": "3021",
"BookCategory": "2"
}
]
}
]
我的 SimpleForm 看起来像这样
<Input value="{Bibliothek/results[0]/>BibliothekName}" editable="false">
</Input>
我错了什么?你能帮帮我吗?
假设您的模拟服务器正常工作,存在两个错误。
绑定语法是{MODEL_NAME>PATH}
(如果模型的名称是undefined
或''
你可以省略第一部分而只使用{PATH}
)。
在你的情况下 MODEL_NAME
是 Bibliothek
。 /results[0]/
是路径的一部分而不是模型名称,因此它永远不会出现在 >
符号之前。
然后在处理 OData 时,您永远不会使用数组索引(如 [0]
)。 OData 条目有一个必须使用的正确密钥(并且您在调用 bindElement
时已经使用过它)。
您的表单随后连接到您的绑定路径。表单下方的所有元素也可以访问此信息,并可以通过设置相对绑定路径来使用它,因此您的代码应该类似于
<Input value="{Bibliothek>BibliothekName}">
举几个基本相同的例子
元素的硬编码绝对绑定
这仅在实体已在另一个请求中加载时有效
<form:SimpleForm>
<Input value="{Bibliothek>/Reserve_Book(Bibliothek='BE1',ReservationNr='4162')/BibliothekName}" />
<form:SimpleForm />
父项的硬编码绝对绑定,子项的相对绑定
如果实体尚未加载,这可以触发它自己的请求
<form:SimpleForm binding="{Bibliothek>/Reserve_Book(Bibliothek='BE1',ReservationNr='4162')}">
<Input value="{Bibliothek>BibliothekName}" />
<form:SimpleForm />
parent 的动态绝对绑定(在 JS 中),child 的相对绑定
这与第二个示例的行为相同
this.byId("form").bindElement({path: "/Reserve_Book(Bibliothek='BE1',ReservationNr='4162')", model: "Bibliothek"});
<form:SimpleForm id="form">
<Input value="{Bibliothek>BibliothekName}" />
<form:SimpleForm />
大家好,我需要你的帮助。
使用 Mockserver 我可以像这样访问 zu OData
var oModel = this.getOwnerComponent().getModel("oServiceModel");
var sReservationPath = "/Book_Regal(Bibliothek='BE1',ReservationNr='4162')/Reserve_Book";
我这样绑定我的表单:
var formA = this.getView().byId("FormA");
formA.setModel(oModel, "Bibliothek");
formA.bindElement({path: "/Reserve_Book(Bibliothek='BE1',ReservationNr='4162')", model: "Bibliothek"});
我的 MockData(BookReserved.json) 看起来像这样:
[
{
"results": [
{
"__metadata": {
"id": "http://MyWebService/Reserve_Book(BibliothekName='BE1',ReservationNr='4162')",
"uri": "http://MyWebService/Reserve_Book(BibliothekName='BE1',ReservationNr='4162')",
"type": "infos.Reserve_BookType"
},
"iScomfirmed": true,
"BibliothekName": "BE1",
"ReservationNr": "4162",
"BookType": "3021",
"BookCategory": "2"
}
]
}
]
我的 SimpleForm 看起来像这样
<Input value="{Bibliothek/results[0]/>BibliothekName}" editable="false">
</Input>
我错了什么?你能帮帮我吗?
假设您的模拟服务器正常工作,存在两个错误。
绑定语法是{MODEL_NAME>PATH}
(如果模型的名称是undefined
或''
你可以省略第一部分而只使用{PATH}
)。
在你的情况下 MODEL_NAME
是 Bibliothek
。 /results[0]/
是路径的一部分而不是模型名称,因此它永远不会出现在 >
符号之前。
然后在处理 OData 时,您永远不会使用数组索引(如 [0]
)。 OData 条目有一个必须使用的正确密钥(并且您在调用 bindElement
时已经使用过它)。
您的表单随后连接到您的绑定路径。表单下方的所有元素也可以访问此信息,并可以通过设置相对绑定路径来使用它,因此您的代码应该类似于
<Input value="{Bibliothek>BibliothekName}">
举几个基本相同的例子
元素的硬编码绝对绑定
这仅在实体已在另一个请求中加载时有效
<form:SimpleForm>
<Input value="{Bibliothek>/Reserve_Book(Bibliothek='BE1',ReservationNr='4162')/BibliothekName}" />
<form:SimpleForm />
父项的硬编码绝对绑定,子项的相对绑定
如果实体尚未加载,这可以触发它自己的请求
<form:SimpleForm binding="{Bibliothek>/Reserve_Book(Bibliothek='BE1',ReservationNr='4162')}">
<Input value="{Bibliothek>BibliothekName}" />
<form:SimpleForm />
parent 的动态绝对绑定(在 JS 中),child 的相对绑定
这与第二个示例的行为相同
this.byId("form").bindElement({path: "/Reserve_Book(Bibliothek='BE1',ReservationNr='4162')", model: "Bibliothek"});
<form:SimpleForm id="form">
<Input value="{Bibliothek>BibliothekName}" />
<form:SimpleForm />