给出以下数据源(OData V2):
类型:客户,项目,客户拥有项目集合
所以/Customer
为我提供了一份客户列表,
相似/Project
并且/Customer(guid'xxxx')/Project
向我提供了与客户相关的项目列表。
现在,鉴于/Customer
上的视图(列表)正在向我展示客户。设置路由,以便选择单个客户移动到单独的CustomerDetail视图,该视图显示客户及其项目集合的详细信息。客户的详细信息显示完美,每个项目也获得一行,但是,名称,描述等项目字段未显示在列表中。进一步调查,单击列表项,从而调用事件处理程序,向我显示列表项具有BindingPath /[object Object]
,这不是我所期望的。
将/Project
上的列表绑定工作正常但显示所有项目,而不仅仅是客户的项目。
为了使事情变得更复杂,当我通过对话框向列表添加新项目(从而在OData模型上执行创建)时,我可以看到服务器有一个往返,并且OPENUI5正在重新查询项目(使用'/ Customer(guid'xxxx')/ Project instead of the initial query with
/ Customer(guid'xxxx')?$ expand = Project`。然后,列表完全填充!请注意,所有的时间,有我的绑定没有变化,这纯粹是OPENUI5的内部魔法。
odata源提供如下:
{
"d" : {
"__metadata" : {
"id" : "http://BASEADDR/Data.svc/Customer(guid'XXX')",
"uri" : "http://BASEADDR/Data.svc/Customer(guid'XXX')",
"type" : "CNTM.Customer"
},
"Project" : [{
"__metadata" : {
"id" : "http://BASEADDR/Data.svc/Project(guid'XXX')",
"uri" : "http://BASEADDR/Data.svc/Project(guid'XXX')",
"type" : "CNTM.Project"
},
"Id" : "XXX",
"CustomerId" : "XXX",
"Name" : "Noch eins",
"Description" : "",
"IsDeleted" : false
}, ...
],
"Id" : "XXX",
"Name" : "TEST",
"IsDeleted" : false
}
}
客户包括多个项目的项目收集。
XML视图上的绑定是:
<Table items="{Project}">
该项目的事件处理程序是:
onProjectItemPress: function (oEvent) {
var oItem = oEvent.getSource();
var oCtx = oItem.getBindingContext();
var gId = oCtx.getProperty("Id");
this.getRouter().navTo("project", {
projectId: gId
});
}
,控制台中的结果是
oCtx : constructor {oModel: constructor, sPath: "/[object Object]"}
我一直在其他项目中使用这种绑定方法,但这个相当简单的样本真的很奇怪......任何想法?
谢谢,问候
JörgFischer