如何在嵌入式组件内部路由?

时间:2016-06-16 10:54:59

标签: javascript json sapui5

我正在开发一个示例sapui5应用程序,它将另一个sapui5应用程序嵌入作为组件。我已经设法加载组件并显示其根视图内容,但这里出现了路由问题。虽然两个应用程序的路由器(主要和嵌套)分别很好地工作,但我根本无法使它们合作 主应用中定义的manifest.json中的路由包含:

"config":{
            "routerClass":"sap.m.routing.Router",
            "viewType":"XML",
            "viewPath":"sample.main.view.detailPages",
            "controlId":"app",
            "controlAggregation":"detailPages",
            "clearTarget":false,
            "transition":"slide",
            "bypassed":{
                "target":["home","menu"]
            }               
        },
"routes":[
    {
        "pattern":"",
        "name":"appHome",
        "target":["home","menu"]
    },
    {
        "pattern":"ExternalApp",
        "name":"externalApp",
        "target":["externalApp","menu"]
    }],
"targets":{
    "home":{
        "viewName":"Home",
        "viewLevel":1
    },
    "menu":{
        "viewPath":"sample.main.view.masterPages",
        "viewName":"menu",
        "viewLevel":1,
        "controlAggregation":"masterPages"
    },
    "externalApp":{
        "viewName":"ExternalApp",
        "viewLevel":2
    }
}

为嵌入式应用定义的manifest.json中的路由包含:

        "config":{
            "routerClass":"sap.m.routing.Router",
            "viewType":"XML",
            "viewPath":"some.sample.view",
            "controlId":"EmbeddedApp",
            "controlAggregation":"pages",
            "clearTarget":false,
            "transition":"slide",
            "bypassed":{
                "target":"home"
            }
        },
        "routes":[
            {
                "name": "home",
                "pattern" : "",
                "target": "home"
            },
            {
                "name":"toPage2",
                "pattern":"page2",
                "target":"next"
            }
        ],
        "targets":{
            "home":{
                "viewName": "App",
                "viewLevel":1
            },
            "next":{
                "viewName": "Page2",
                "viewLevel":2
            }
        }

当我在主应用中导航到视图时,应用程序的应用程序存在,我正确地看到了根视图(使用网址#/ExternalApp)。 当我使用navTo("toPage2")在嵌入式应用程序中导航时,我在控制台中没有错误(因此路由器已正确实现),但我得到#/ExternalApp/page2而不是获取url hash #/page2。这导致主应用程序中无法识别的模式并被绕过。

问题是 - 在作为组件嵌入的应用程序内实现路由的正确方法是什么?我想主应用程序manifest.json应该有一些更改,或者应该将一些其他参数传递给组件,但我找不到任何有用的信息。

EDIT1:
到目前为止我发现的内容 - Route对象有一个名为parent的属性,我可以在其中声明容器对象的路径。填充此属性后,外部应用程序的路径模式将自动以适当的父路径为前缀。不是最好的解决方案(外部应用程序仍然需要一些关于容器应用程序的先验信息),但至少在更改的情况下不必手动重写模式。

1 个答案:

答案 0 :(得分:0)

如果您希望两台路由器都能正常运行,您可以协调路由模式,例如:

在容器应用中:

"externalApp":{
    "viewName":"ExternalApp/:appspecific:",
    "viewLevel":2
}

在外部应用中:

"next":{
    "viewName": "ExternalApp/Page2",
    "viewLevel":2
}