OData服务(V2)包含以下多个导航属性:
ClassNum: "ZPM_TEST_01" ClassNumDescr: "ZPM_TEST_01" ClassType: "001" InternalClass: "0000000130" ValidFrom: Tue Sep 04 2018 02:00:00 GMT+0200 (Central European Summer Time) {} ValidUntil: Fri Dec 31 9999 01:00:00 GMT+0100 (Central European Standard Time) {} to_IClassHeaderVh: {__deferred: {…}} to_IClassVh: {__deferred: {…}}
如上所述,to_IClassHeaderVh
和to_IClassVh
是导航属性。
请求OData服务的代码:
oModel.read(sUri, {
success: function (oData) {
},
error: Util.showErrorClassNotFound
});
如何通过代码从导航属性中获取URL?我可以通过以下对象获取它:
oData.to_IClassVh.__deferred.uri
但是我不知道这是否是正确的方法。
答案 0 :(得分:1)
导航属性,顾名思义,是可以用来导航到相关实体类型(spec)的属性。 UI5框架也支持此功能,因此应用程序开发人员不必手动提取URL。实际上,您甚至不需要调用read
。让我们以这个EDM [1] 为例:
客户
导航:“订单”
1 ___ n
订购
导航:“客户”
...来自此Northwind service (metadata)
从one entity to a collection导航:
<Page binding="{/Customers('ALFKI')}">
<List items="{Orders}">
<StandardListItem title="{OrderID}" />
</List>
</Page>
从one entity to another single entity导航:
<Page binding="{/Orders(10643)}">
<Panel binding="{Customer}" headerText="{ContactName}" />
</Page>
以下是使用导航属性的示例:https://embed.plnkr.co/F3t6gI8TPUZwCOnA
在您的情况下,您可以使用to_IClassHeaderVh
或to_IClassVh
代替Customer
或Orders
。 UI5随后将为您发送请求。请记住,只有上下文绑定和聚合绑定才能处理发送请求。绑定属性不。
如果您想知道XML中的binding
属性;这只是bind a single entity (context)的方式之一。如果通常需要动态指定实体键(ID),则必须在JS中使用API bindElement
[API] 。仅出于示例目的,我在这里对键进行硬编码。
此外,您还可以添加binding parameter expand
,以等待导航属性名称。
<Page binding="{
path: '/Orders(10643)',
parameters: {
expand: 'Customer'
}
}" >
<!-- ... -->
</Page>
响应: https://services.odata.org/V2/Northwind/Northwind.svc/Orders(10643)?$expand=Customer&$format=json
以下是使用expand的示例:https://embed.plnkr.co/wAlrHB
[1]:“实体数据模型”-特定于OData的E / R模型