首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SAPUI5 5/OPENUI5 5-对话路由

SAPUI5 5/OPENUI5 5-对话路由
EN

Stack Overflow用户
提问于 2015-06-11 15:47:33
回答 1查看 3.5K关注 0票数 1

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

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

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

代码语言:javascript
运行
复制
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();
},

接下来是我跳到我的碎片上

代码语言:javascript
运行
复制
<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>

在这个Dialog片段中,我加载了我的视图,包括我的控制器等等。这可以打开对话框并显示url路径,但是很明显,一旦我重新加载页面,一切都结束了。

除此之外,我还从启动路由器的AbstractController扩展了“AbstractController”视图。它对我的正常视图很好,但是当我打开对话框时,我会丢失对它的引用,并且不能返回到我的初始视图。

我知道这个解决方案是行不通的,所以我希望你对如何让它起作用有一些建议!

提前感谢!

顺便说一句:这是Component.js

代码语言:javascript
运行
复制
routes : [
            {
                pattern : "",
                name : navigation.Constants.MyEvents,
                view : navigation.Constants.MyEvents,
                viewId : navigation.Constants.MyEvents,
                targetAggregation : "pages",
                targetControl : "idAppControl",
                subroutes : [
                    {
                        pattern : "{id}",
                        name : navigation.Constants.EventDetailFragment,
                        view : navigation.Constants.EventDetailFragment
                    }
                ]
            }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-11 16:47:12

在刷新时,将调用attachRouteMatched方法。

代码语言:javascript
运行
复制
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);
}

实际上,您可以重用campaignSelectHandler,只需更改签名实现,这样它就可以接受eventId

希望这能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30785551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档