0

对于 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"
        });
    }
4

1 回答 1

2

在遇到类似问题一段时间后,我终于找到了罪魁祸首——在 manifest.json 的模型设置中,我将“defaultBindingMode”从“OneTime”更改为“OneWay”。

    "models": {
         ...
         ...

        "": {
            "type": "sap.ui.model.odata.v2.ODataModel",
            "settings": {
                "defaultOperationMode": "Server",
                "defaultBindingMode": "OneWay",
                "defaultCountMode": "Request"
            },
            "dataSource": "yourdatasource",
            "preload": true
        }
   }
于 2018-04-17T14:28:13.477 回答