2012-07-26 100 views
7

我很好奇,想知道剛纔是什麼邏輯在於該層相對於新的餘燼路由和控制器:灰燼路由器和控制器邏輯

如果我們把下面的路線爲例:

step1: Ember.Route.extend 
    route: '/step1' 
    connectOutlets: (router, event) -> 
     exercise = WZ.Exercise.createRecord() 
     router.get('exercisesNewStep1Controller').set 'groups', WZ.store.find(WZ.Group) 
     router.get('exercisesNewController').connectOutlet 'step', 'exercisesNewStep1', exercise 

我ExercisesNewStep1Controller目前logicless:

WZ.ExercisesNewStep1Controller = Em.Controller.extend() 

推薦意見似乎是有路線只取分配正確的出口,以正確的控制器機智的護理h控制器中的任何其他邏輯。

我應該修改我的控制器是這樣的:

WZ.ExercisesNewStep1Controller = Em.Controller.extend 
    createGroup: -> 
    @set 'groups', WZ.store.find(WZ.Group) 

這是一個很簡單的例子,但我認爲邏輯成立。

我有點困惑,在哪裏與所有的層。我認爲有必要創建所有這些xxxController,xxxView文件以及它們之間的耦合,從而產生少量開銷。

我喜歡餘燼,但我只是想提出這一點。

回答

2

https://speakerdeck.com/u/tomdale/p/emberjs-more-than-meets-the-eye幻燈片55

其實我不知道這是否是上最新與當前的良好做法,但該模型管理(創建/編輯/刪除)似乎沒有在任何地方表示。在我看來,它必須響應查看事件和連接方法。所以你的第一個例子對我來說很好。 此外,在這張幻燈片中,控制器應該包含非常少的邏輯......但真正「非常小的邏輯」是什麼?

您的問題對我來說非常重要,因爲我們沒有任何其他建議,特別是來自有經驗的ember用戶。

4

在Sproutcore(如果這不適用於來自Sproutcore的Ember,有人會說出來),控制器應該幾乎總是隻是啞巴代理。他們什麼都不做。

假設對Ember有效,我不會在那裏移動邏輯。

推薦意見似乎是有路線只取 照顧控制器的任何其他 邏輯分配正確的出口,以正確的控制器。

我認爲這是正確的。從我在網上看到的例子來看,路線就是國家。去github, this link,你會看到路線延伸國家。所以應用級別的事件應該在您的路由(即州)中處理。在這裏你會得到相關的對象並將它們放入適用的控制器中。

5

我與蒂爾德團隊進行了幾次交流,湯姆戴爾教導我們遵循hvgotcodes提出的方式。

但隨着彼得Wagenet商量後發生細化:至於我interrogation,彼得&耶胡達mitigated位置的回覆,我們從湯姆的解釋舉行。

所以我總結整個畫面說:

  • 行爲應該在一個較高級別的路由的事件處理程序進行編碼,
  • 但工廠化低級原可(/應注意什麼?)在控制器中本地化。

原因是任何處理都應該限定在給定的路徑中,這確保了整個應用程序的連貫行爲,而不是嚮應用程序的任何部分打開所有可能的處理。