2013-09-23 27 views
2

是否可以關閉或停止骨幹路由器聽其定義的路由?有沒有辦法停止骨幹路由器?

我問,因爲我一直在測試Backbone SubRoute(https://github.com/ModelN/backbone.subroute),設置一個應用程序有很多空間,用戶可以運行許多子應用程序。

因此,我已經定義瞭如下鯛AA主路由器,subrouter結構:

MainRouter = Backbone.Router.extend 
    routes: 
     "":"root" 
     "spaces/:id/:module(/*subroute)":"invokeModule" 

    root:() -> 
     console.log "root trigger" 

    invokeModule: (id, module, subroute) -> 
     that = this 
     GigaApp.module(module).start({nested_root: "spaces/#{id}/#{module}"}) 

    SubAppRouter = Backbone.SubRoute.extend 
    routes: 
     "":"app_home" 

    app_home:() -> 
     console.log 'at sub app home' 

    SubApp.on "start", (options) -> 
    SubApp.router = new SubAppRouter(options.nested_root) 

這是一般的結構從第一時間的子應用程序被用於空間初始化工作,作爲MainRouter開始SubApp ,它使用正確的嵌套路由初始化其路由器。隨後,SubAppRouter中定義的其他路由也會觸發正常。然而,如果你導航到不同的空間(不同的id),並且回到第一個空間,這個結構就會中斷,因爲SubAppRouter已經爲那個空間初始化了,覆蓋了MainRouter,並且沒有調用SubApp的開始由MainRouter製成。

所以,我想知道是否有一種方法可以停止或禁用取消綁定觸發的骨幹路由器的路由。

回答

2

由於這一刻,答案是NO

德里克·貝利打開這個問題上的骨幹回購建議一些變化骨幹的結構,以支持這種變化:https://github.com/jashkenas/backbone/pull/1630

有跟隨的討論這種改變的優點,其中有以下幾點:

要開始 - 恐怕我不明白這裏的前提。有跡象表明,違背這個補丁路由的一對夫婦的公理:

路由器存在匹配的URL在應用程序中的位置。

URL的整點是,他們總是到達 - 一旦你有一個網址,你可以回去給它(書籤,它粘貼到瀏覽器),在任何時候。

我也瀏覽了骨幹源代碼,並沒有跡象表明我正在考慮的功能是可能的。

1

我很好奇你爲什麼在Marionette中不使用AppRouter?它應該解決您有關將路線劃分爲較小的AppRoute對象的問題...

查看BackboneRails瞭解構建大型應用程序的某些截屏視頻。它不僅適用於使用rails作爲後端的開發人員。它提供了一種很好的方式來在模塊中佈局應用程序結構(每個模塊都有自己的應用程序路徑)。非常值得推薦。

+0

hi Jakob。感謝您的回覆,我會嘗試AppRouter,除了我正在第一次學習/嘗試Marionette之外,我沒有理由不使用它。 – jay

+0

夠公平=) - 讓我知道我能否以任何方式幫助你。這是一個很好的解決方案,我真的很推薦在BackboneRails上觀看截屏視頻。幫助我很多,它給你一種構建你的應用程序的方式。 –

+0

謝謝,本週我會抽出時間看他們。AppRouter是一種很好的DRYer方式(似乎)在Marionette應用程序中運行路由,因爲它消除了僅需調用單個控制器操作的多個路由器操作的需要。然而,我仍然認爲我需要一些嵌套的路由 - 使子應用路由器聽取他們的路由,而忽略路由的基礎「空間/:ID」段。我會繼續評估AppRouter,也許我太過於複雜。 – jay