2014-03-19 27 views
1

我一直在Ember工作了大約一個月,但我仍然對Ember中的各種掛鉤感到困惑。我知道一切,但不能將它們縫合在一起。我理解模型的用法,beforeModel和afterModel掛鉤。什麼是setupController鉤子用於什麼時候在生命週期中調用它。還有什麼是renderTemplate鉤子用於。我一直在使用它來執行應每次進行模板渲染,但在網上看完之後,我發現,這是當一個人想呈現另一個模板像一個插座使用功能:Ember掛鉤說明

renderTemplate: function() { 
    this.render('favoritePost'); 
} 

如果我在路由中定義了模型鉤子和renderTemplate鉤子,之後我開始出錯並且沒有任何工作。我在哪裏可以做每次加載模板時都應該做的事情。我知道我可以使用didInsertElement鉤子做一個類似的事情,但不能創建視圖嗎?

回答

3

真的最好的事情是你會閱讀ember guides中的路由部分。

setupController掛鉤完全按照名稱的名稱進行操作 - 它使用模型數據設置相關的控制器(如果需要,還可以設置控制器)。 模型數據可以來源於模型鉤子(給定一個手動鏈接)或鏈接到幫助器/ transitionToRoute調用 - 所以每當您以任何一種方式輸入此路由時都會調用它。 默認情況下,它會將模型作爲「模型」屬性附加到隱含控制器。

renderTemplate掛鉤通常僅在您要呈現不是由此路由的命名約定設置的模板/視圖,或者掛鉤與常規默認控件不同的控制器時才使用。 它也可以用於渲染到特定模板中的特定插座。 默認情況下,它將使用隱含的控制器作爲上下文呈現隱含的視圖/模板。

關於你的問題你應該在哪裏找到你的代碼 - 因爲它顯然與視圖層有關 - 你應該把它放在視圖中,而不是在路由器中。 如果你堅持把它放在路由器中 - 確保在覆蓋這些掛鉤時調用this._super()。

0

我使用renderTemplate在我的應用程序之一,我們使用的語法是:

this.render({ 
     into: 'viewName', 
     outlet: 'outletName' 
    }); 

我用你都在這條路線規定的鉤子和沒有與它的任何問題。