嵌套路由SAPUI5

问题描述 投票:0回答:1

我有一个关于 SAPUI5 中路由的问题。我有一个带有两个主视图的 SplitApp 容器。第一个主视图显示设备列表。第二个主视图显示所选设备的测量点列表。数据(现在)位于客户端 JSON 模型中,如下所示:

{
"Equipments": [
    {
        "EquipmentNr": "Equipment 0000000001",
        "Messpunkte": [
                {
                    "MesspunktNr": "Messpunkt 01"
                },
                {
                    "MesspunktNr": "Messpunkt 02"
                },
                {
                    "MesspunktNr": "Messpunkt 03"
                }
            ]
    },

详细信息页面现在应该能够访问在第二个主视图中选择的“Messpunkt”,但我无法通过路由传递参数。 路由到详细视图的路由配置:

            "routes": [...
            {
            "pattern": "master/{equiPath}/detail/{impttPath}",
            "name": "detail",
            "target": "detail"
            }
        ],
        "targets": {
            ...
            "detail": {
                "viewName": "DetailPage",
                "controlAggregation": "detailPages",
                "parent": "master"
            }
        }

我不确定如何在 masterpage2 的控制器中调用 navTo 方法,因为当我尝试这样做时,它总是给我一个错误,说“需要段 {equiPath}”。

以这种形式调用onNavToDetail方法时:

    onNavToDetail : function(oEvent) {
                var oItem = oEvent.getSource();
                var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
                oRouter.navTo("detail", {
                    equiPath: oItem.getBindingContext("equi").getPath().substr(0)
                });

我得到了整个路径,例如“/Equipments/0/Messpunkte/0”对于段“{equiPath}

文档“使用嵌套组件”中的信息并没有真正帮助我。 感谢您的每一个帮助。 最美好的祝愿

routes nested components sapui5 parent
1个回答
1
投票

我现在已经弄清楚问题出在哪里了。在 scn 的帮助下,可以解决这个问题。 首先我的路由配置是错误的。它必须看起来像:

"routes": [
            {
            "pattern": "",
            "name": "home",
            "target": "home"
            },
            {
            "pattern": "master/{equiPath}",
            "name": "master",
            "target": "master"
            },
            {
            "pattern": "/master/{equiPath}/detail/{impttPath}",
            "name": "detail",
            "target": ["detail", "master"]
            }
        ],
        "targets": {
            "home": {
                "viewName": "MasterPage",
                "viewLevel": 1,
                "controlAggregation": "masterPages"
            },
            "master": {
                "viewName": "MasterPage2",
                "viewLevel": 2,
                "controlAggregation": "masterPages"
            },
            "detail": {
                "viewName": "DetailPage",
                "viewLevel": 3,
                "controlAggregation": "detailPages"
            }
        }

然后我用onNavToDetail函数调用路由器,并借助正则表达式传递参数。 这是我使用的代码:

onNavToDetail : function(oEvent) {
        var oItem = oEvent.getSource();
        var oRouter = sap.ui.core.UIComponent.getRouterFor(this);

        var sPath = oItem.getBindingContext("equi").getPath();
        console.log(sPath);
        var regExpSpath = /([0-999])/g;
        var result = sPath.match(regExpSpath);
        console.log(result[0]);
        console.log(result[1]);

        oRouter.navTo("detail", {
            equiPath: result[0],
            impttPath: result[1]
        }); 
    }
© www.soinside.com 2019 - 2024. All rights reserved.