2015-09-01 33 views
0

在回答other question時,我做出了錯誤的聲明,寫出在每次轉換後都會運行ApplicationRoute.beforeModel()鉤子。當意識到這一事實時,我確認鉤子只使用barember Ember應用程序運行一次。爲什麼ApplicationRoute不會對轉換做出反應

不幸的是,我在文檔中找不到任何可以解釋這種行爲的東西。 First paragraph of beforeModel documentation狀態:

這個鉤子是第一次當試圖轉變到路線或它的一個子稱爲路由條目驗證掛鉤。

至於ApplicationRoute - 沒有很多關於它,在我們可以發現信息行動從控制器通過路由到其父氣泡引導action bubbling一部分,它列出了ApplicationRoute作爲路線的頂部父:

如果模板的控制器和當前活動的路徑均未實現處理程序,則操作將繼續冒泡到任何父路線。最終,如果定義了ApplicationRoute,它將有機會處理該操作。

從邏輯上講,這應該表示每個轉換都應該運行ApplicationRoute掛鉤,這與實際發生的情況相反。

所以,問題是:

爲什麼ApplicationRoute沒有應答轉移事件,什麼是自定義的路由另一個區別是什麼?

回答

2

看起來您的主要問題似乎是:爲什麼應用程序路徑不會在每次轉換時運行?長的答案有點複雜,但簡短的答案是:因爲它不必。

對於漫長的答案,讓我們來舉個例子。

application 
    index 
    photos 
     view 
     new 

一組非常簡單的路線。現在讓我們假設你想要訪問photos.view路線。 Ember將遵循以下步驟:

  1. 運行application路由鉤子。 (包括beforeModel,modelafterModel)。
  2. 運行photos路由鉤子。 (包括beforeModel,modelafterModel)。
  3. 運行view路由鉤子。 (包括beforeModel,modelafterModel)。

Ember必須初始化您想要訪問的路線的每條父路線的路線。這就說得通了。但假設您從photos.view轉換爲photos.new。 Ember 不會重新運行applicationphotos路由設置掛鉤。它不需要。這些模型已經得到解決,沒有任何東西使他們失效。Ember是只能運行photos.new安裝鉤。如果轉換爲index路由,則只會爲該路由運行安裝程序鉤子,而不是應用程序路由。

短故事長,Ember不去重新運行安裝程序鉤子和模型提取邏輯,如果它不必。除非你使某些緩存的數據無效,或者強制重新加載,否則Ember只會運行一次你的路由掛鉤。

如果您希望之前運行,每過渡,這東西我以前做的是創造一個基本路線,所有我的路線,從延長的邏輯,然後覆蓋activate hook

+0

事實上,一旦處理嵌套路線並觀察行爲,這一點就更加明顯。如果以某種形式獲得開發人員指南,這將非常棒。 – XLII

相關問題