2013-08-02 121 views
1

我對這個世界很新,所以我需要一些說明。也許我可能在這個問題上是錯的。所以,請隨時糾正我。Marionette Event Aggregator vs Backbone Router

我正在學習Marionette和Backbone如何一起工作。哦耶。木偶帶給我們對骨幹的延伸。真的很好的東西。

對我來說不明顯的事情是何時使用Backbone提供的路由機制以及何時使用Marionette使用發佈者/訂閱者模式。

有什麼經驗法則嗎?

在這裏,Where to use event aggregator in backbone marionette?,類似的討論,但沒有關於如何使用這個或另一個的建議。

回答

5

我的路由管理採取的免費預覽,說明我的書上的木偶(http://samples.leanpub.com/marionette-gentle-introduction-sample.pdf

基本上,我認爲(別人不一定有它)是一個骨幹路由應該用於配置當用戶通過URL「輸入」應用程序時的應用程序狀態。換句話說,它將解析參數,並調用適當的控制器操作。

但是,一旦初始狀態設置完成,即使用戶在應用程序中導航,也不應再觸發路由代碼。

下面是一個例子:

  1. 用戶輸入到達的 「接觸/ 2 /編輯」。主幹路由代碼將提取2參數,並使用該參數調用edit控制器操作(獲取該聯繫人,顯示正確的視圖等)。換句話說,正在配置初始應用程序狀態。
  2. 用戶點擊導致「contacts」URL的「顯示所有聯繫人」鏈接。在這裏,我認爲這個修改應該通過人偶事件來處理(即指示用戶想看到所有聯繫人)。畢竟,我們知道用戶想要做什麼,以及應該顯示哪個URL片段。換句話說,沒有理由涉及路由代碼。

請注意,這是我的看法,其他開發者只需在用戶點擊鏈接時通過trigger: true即可。但正如我在上面鏈接的書中解釋的那樣,這往往會導致開發人員在JavaScript中創建「無狀態應用程序」(例如,在URL中傳遞大量參數,即使它們應該存儲在應用程序的狀態中)。 Ater有一個原因,默認情況下,Backbone的navigate方法有trigger: false

德里克·貝利(木偶的創建者)還討論了這裏的問題:http://lostechies.com/derickbailey/2011/08/03/stop-using-backbone-as-if-it-were-a-stateless-web-server/

+0

+1非常好的解釋。您能否更好地解釋當用戶通過URL「輸入」應用程序時,您的意思是什麼?我不清楚這是什麼意思。是的!我已經從LeanPub購買了書籍;-) –

+0

基本上,用戶在地址欄中鍵入一個URL,點擊某個地方的鏈接或書籤等,這會使木偶應用程序加載(以及MyApp.start()執行)。這就是我所說的「進入」應用程序。之後,不應該有更多的路由事件,只有URL更新。 –

0

事件聚合器對通知事物更有用。 (想想反饋小塊)從服務器(更新記錄)

  • 消息
  • 讓其他機型知道事情已經改變
  • 鎖都記錄下來,同時節省,直到保存
  • 單時刻東西

路由器是您想要的狀態爲保存,能夠事情(認爲在MPA單獨的頁面)

  • 型號編輯頁面
  • 模型視圖頁
  • 的東西,將留到另一種活動或事件改變它

如果你不知道,如果事情是一個事件或頁面,後來想想並提出單獨的問題。

+0

感謝您的重播。但是,你能解釋一下你對路由器的好處嗎?我不清楚。 –

+0

// Marionette控制器 // --------------------- // //用作控制器的多用途對象 //模塊和路由器,以及作爲工作流程的中介,以及協調其他對象,視圖等等。 – MarkKGreenway