2015-06-11 69 views
1

我目前堅持路由和對話的組合。 我有一個列表元素的視圖,當我點擊列表中的一個元素時,我希望Detail視圖在對話框(彈出窗口)中顯示。 事情是,我也想在我的網址列表元素的ID和當我重新加載頁面,而對話框仍然打開時,我想跳到這個確切的位置了(對話框是在全屏,它看起來像一個自己的看法)。SAPUI5/OPENUI5 - 使用對話框路由

所以,我走到這一步:

當我點擊一個元素列表中的我調用這個函數

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> 

在這個對話框片段中,我加載了我的視圖,包括我的控制器等。 這適用於打開對話框並顯示url路徑,但顯然只要我重新加載頁面ev一切都消失了。

除此之外,我從我啓動路由器的AbstractController擴展了「ui.views.pages.EventDetail」視圖。它適用於我的普通視圖,但是當我打開對話框時,我放棄了對它的引用,並且無法返回到我的初始視圖。

我知道這個解決方案不能工作,所以我希望你有一些建議,如何讓它的工作!

提前致謝!

BTW:這是Component.js

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 
        } 
       ] 
      } 

回答

1

在刷新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); 
} 

其實你可以重用campaignSelectHandler只需更改簽名實現它接受eventId

希望這有助於

這樣的方式