簡體   English   中英

骨干網路由,backbone.history啟動后有多個路由器

[英]Backbone routing, multiple routers after backbone.history starts

所以我有一個問題。

我處在需要多個Backbone.Router來相應地處理自己的路由等的情況下,並且根據主路由器(以下示例中的Router 1)了解當前路由來動態加載它們。

我遇到的主要問題是這樣的。

  • Router1加載
  • Backbone.history.start()
  • 路由器1加載路由器2
  • Router2沒有做任何事情,因為歷史已經開始

有什么可能的方法可以讓router2查看當前歷史記錄片段,而不必再次調用router1中的路由?

IE不會手動調用Backbone.history.loadUrl(Backbone.history.getFragment());

編輯:

主要目標是現在我有兩個視圖,顯然每個視圖都需要一個路由器。 考慮到將來可能會有n個視圖知道每個單獨的視圖,因此沒有一個大型路由器是沒有意義的。

我建議您嘗試看看MarionetteJS ,它是使用Backbone構建復合應用程序的絕佳框架。 具體看一下MarionetteJS示例應用程序的源代碼。 它的作用是將應用程序分成幾個子應用程序。 每個子應用都有自己的路由器,但是它們都在父應用上定義了單獨的路由器。 父應用初始化時,將創建所有路由器,然后才調用Backbone.history.start() 我意識到,這個答案要求您深入學習“木偶戲”,該書具有陡峭的學習曲線,但我認為這是完全值得的。 我們已經在此基礎上構建了SOOMLA Designer Web應用程序的整個體系結構。 當您想要保留重復的Backbone樣板代碼時,Marionette已被證明是一個很好的解決方案。 感謝Derick Bailey提供了一個很棒的開源框架。

您能否提供一個復制案例的jsfiddle? 因為您通常可以做到這一點(我個人有一個實例化路由器,啟動歷史記錄,實例化其他幾個實例的應用程序,它運行得很好。)

在此之前,以下是有關路由器的一些信息:
-實例化路由器時,路由綁定到Backbone.history(一個唯一的對象)
-這意味着您不能期望兩個路由器都執行回調
-這也意味着存在固定順序:將首先檢查最后實例化的路由器的路由

編輯:
好的,我想您要同時執行這兩個路由,因為您希望有人直接進入tab1 / stuff。
丑陋的方式:您可以停止Backbone.history(Backbone.history.stop())並隨后立即啟動,router2的路由將被綁定...
其他可能性:為什么不將所有路由都放在主路由器中? 好吧,我想如果您真的有太多可以理解的話。
最后一種可能性(我能想到):利用最后一個路由器的路由首先經過測試的事實,這就是您所需要的。 更改主路由器的路由,添加一條通用路由,以捕獲您所需的路由(例如tab1)。 不執行任何操作,向后導航至/ tab1。 准備2個導航,如下所示:

this.navigate('/tab1', {trigger: true});
this.once('someEvent', function() {
    this.navigate('/tab1/stuff', {trigger: true});
});

如果您有足夠的通用網址,則可以用與通用路由匹配的參數替換tab1&內容。

編輯2:
好的,假設我在上一條評論中寫了所有內容,並且您使用諸如視圖/操作之類的標簽(或URL)訪問了Backbone視圖,那么這是一個編輯。 我會盡可能地做到更徹底(因為我仍然沒有您問題的所有詳細信息)。

該jsfiddle顯示了原理。 現在,仍然存在一個事實,那就是它將與客戶的歷史混淆(我認為,也許可以通過某種方式來避免在Backbone中發生這種情況,如果這對您來說是個問題)。

現在,可能還有其他問題。 其中最少的可能是輔助路由器中的樣板文件(必須在任何路由之前放置view / )。 有解決方案,但是那太深了。 較大的是:
我已經說過了,但是只有一條路線可以匹配。 因此,您的主路由器CANT用於處理客戶端將更改視圖的事實(例如,從view1 / action1view2 / action2 ,之前已經加載過router2)。 該action2將被執行,但是如果您在主路由器中重新加載了視圖,則不會完成。
就像最后一條評論一樣,您可以在創建主路由器后修改Routers核心的initialize方法來添加樣板行為(重新加載視圖?): 這是一個適合您的示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM