如何在 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_NAMEBibliothek/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 />