对于 SAPUI5 应用程序,我创建了一个具有实体“查询”的 OData 服务。服务本身运行良好。
为了在该服务之上构建第一个 SAPUI5 应用程序,我进行了演练以了解基础知识:https ://sapui5.hana.ondemand.com/#/topic/2366345a94f64ec1a80f9d9ce50a59ef
现在,如果我用我的一项服务替换 Northwind 服务并将其绑定为模型“查询”,那么除了一件事之外,它都可以正常工作。单击列表项(“查询/>查询”)时,它会通过数据绑定正确加载该对象的详细信息 -但只有一次! 返回主视图并选择另一个列表项时,它会再次打开详细视图,但仍显示单击的第一个列表项的详细信息。
当通过单击主视图中的列表项打开新的 URL/路径时,似乎没有刷新详细视图。但它在我使用 Northwind OData 服务的环境中的演练示例中 100% 有效。
有人有线索吗?
一些编码...
列表显示:
<mvc:View
controllerName="sap.ui.demo.wt.controller.InvoiceList"
xmlns="sap.m"
xmlns:mvc="sap.ui.core.mvc">
<List
class="sapUiResponsiveMargin"
width="auto"
items="{path : 'enquiry>/Enquiries'}">
<items>
<ObjectListItem
title="{enquiry>CompanyName}"
type="Navigation"
press="onPress">
</ObjectListItem>
</items>
</List>
</mvc:View>
列表控制器 - 单击列表项时触发 onPress 事件:
[..]
onPress: function (oEvent) {
var oItem = oEvent.getSource();
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.navTo("detail", {
enquiryPath: oItem.getBindingContext("enquiry").getPath().substr(1)
});
}
[..]
详细视图:
<mvc:View
controllerName="sap.ui.demo.wt.controller.Detail"
xmlns="sap.m"
xmlns:mvc="sap.ui.core.mvc">
<Page
title="{i18n>detailPageTitle}">
<ObjectHeader
intro="{enquiry>EnquiryID}"/>
</Page>
详细控制器 - 在初始化时触发事件:
onInit: function () {
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.getRoute("detail").attachPatternMatched(this._onObjectMatched, this);
},
_onObjectMatched: function (oEvent) {
this.getView().bindElement({
path: "/" + oEvent.getParameter("arguments").enquiryPath,
model: "enquiry"
});
}