Routing SAPUI5/OPENUI5-带对话框的路由

Routing SAPUI5/OPENUI5-带对话框的路由,routing,dialog,sapui5,Routing,Dialog,Sapui5,目前,我被路由和对话框的结合所困扰。 我有一个包含列表元素的视图,当我单击列表中的元素时,我希望在对话框(弹出窗口)中显示详细视图。 问题是,我还需要url中列表元素的ID,当我在对话框仍然打开的情况下重新加载页面时,我想再次跳到这个确切的位置(对话框处于全屏状态,看起来像是自己的视图) 到目前为止,我得到的是: 当我点击列表中的一个元素时,我调用这个函数 campaignSelectHandler : function () { if(!this.fragment) {

目前,我被路由和对话框的结合所困扰。 我有一个包含列表元素的视图,当我单击列表中的元素时,我希望在对话框(弹出窗口)中显示详细视图。 问题是,我还需要url中列表元素的ID,当我在对话框仍然打开的情况下重新加载页面时,我想再次跳到这个确切的位置(对话框处于全屏状态,看起来像是自己的视图)

到目前为止,我得到的是:

当我点击列表中的一个元素时,我调用这个函数

campaignSelectHandler : function () {
    if(!this.fragment) {
        var controller = new sap.ui.controller("ui.controls.fragments.EventDetail");
        this.fragment = sap.ui.xmlfragment("ui.controls.fragments.EventDetail", controller);
    }
    //this.router.navTo(navigation.Constants.EventDetailFragment, {id : 12345});
    this.router.navTo(navigation.Constants.EventDetailFragment, {id: 1337});
    this.fragment.open();
},
下一件事是我跳到我的碎片

<Dialog     id="dialogEventDetail"
        xmlns:view="ui.views.pages"
        xmlns="sap.m"
        xmlns:controls="ui.controls"
        xmlns:core="sap.ui.core"
        xmlns:mvc="sap.ui.core.mvc"
        contentWidth="100%" contentHeight="100%"
        showHeader="false"
        class="eventDetail"
        horizontalScrolling="false"
        verticalScrolling="false">

<mvc:XMLView viewName="ui.views.pages.EventDetail">

</mvc:XMLView>

</Dialog>

刷新时,将调用attachRouteMatched方法

onInit: function() {
    var _this = this
    var oRouter = sap.ui.core.routing.Router.getRouter("appRouter");
    //can also use directly this.oRouter.attachRouteMatched(...)
    //I see you using this.router 
    oRouter.attachRouteMatched(function(oEvent) {
        if (oEvent.getParameter("name") !== navigation.Constants.EventDetailFragment) {
            return:
        }
        try {

            var oHasher = new sap.ui.core.routing.HashChanger();
            var hash = oHasher.getHash(); //this will get everything which is in URL after #
            //TODO : split the hash accordingly and find the event id and open your dialog and assign to oEventId
            if (!_this.fragment) {
                var controller = new sap.ui.controller("ui.controls.fragments.EventDetail");
                _this.fragment = sap.ui.xmlfragment("ui.controls.fragments.EventDetail", controller);
            }
            _this.router.navTo(navigation.Constants.EventDetailFragment, {
                id: oEventId
            });
            _this.fragment.open();
        } catch (e) {
            jQuery.sap.log.warning("Couldn't find the right event")
        }
    }, this);
}
实际上,您可以重用
ActivitySelectHandler
,只需更改签名实现,使其接受
eventId

希望这有帮助

onInit: function() {
    var _this = this
    var oRouter = sap.ui.core.routing.Router.getRouter("appRouter");
    //can also use directly this.oRouter.attachRouteMatched(...)
    //I see you using this.router 
    oRouter.attachRouteMatched(function(oEvent) {
        if (oEvent.getParameter("name") !== navigation.Constants.EventDetailFragment) {
            return:
        }
        try {

            var oHasher = new sap.ui.core.routing.HashChanger();
            var hash = oHasher.getHash(); //this will get everything which is in URL after #
            //TODO : split the hash accordingly and find the event id and open your dialog and assign to oEventId
            if (!_this.fragment) {
                var controller = new sap.ui.controller("ui.controls.fragments.EventDetail");
                _this.fragment = sap.ui.xmlfragment("ui.controls.fragments.EventDetail", controller);
            }
            _this.router.navTo(navigation.Constants.EventDetailFragment, {
                id: oEventId
            });
            _this.fragment.open();
        } catch (e) {
            jQuery.sap.log.warning("Couldn't find the right event")
        }
    }, this);
}