Привязка 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
        }
   }
Другие вопросы по тегам