Привязка OData SAPUI5 не обновляется при навигации по маршруту
Для приложения SAPUI5 я создал службу OData, имеющую сущность "Запросы". Сам сервис работает нормально.
Чтобы создать первое приложение SAPUI5 поверх этого сервиса, я взял пошаговое руководство, чтобы получить основы: https://sapui5.hana.ondemand.com/
Теперь, если я заменю Службу Northwind своей единственной службой и свяжу ее как модель "запрос", все будет работать нормально, кроме одной вещи. При нажатии на элемент списка ("query/> Inquiries") он корректно загружает детали этого объекта через привязку данных - но только один раз! Возвращаясь к основному виду и выбирая другой элемент списка, он снова открывает подробный вид, но по-прежнему показывает подробности первого щелкнувшего элемента списка.
Похоже, что подробное представление не обновляется, когда открывается новый URL/ путь, если щелкнуть элемент списка в главном представлении. Но это работает на 100% на примере Walkthrough в моей среде, использующей службу Northwind OData.
У кого-нибудь есть подсказка?
Некоторая кодировка...
Посмотреть список:
<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>
подробный контроллер - запускает событие в init:
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"
});
}
1 ответ
Некоторое время мучаясь с подобной проблемой, я наконец нашел виновника - в настройках модели в manifest.json я изменил "defaultBindingMode" с "OneTime" на "OneWay".
"models": {
...
...
"": {
"type": "sap.ui.model.odata.v2.ODataModel",
"settings": {
"defaultOperationMode": "Server",
"defaultBindingMode": "OneWay",
"defaultCountMode": "Request"
},
"dataSource": "yourdatasource",
"preload": true
}
}