2012-07-26 6 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ファイルとそれらの間の結合を作成することによって、わずかなオーバーヘッドがあると思います。

私はemberが大好きですが、この点を上げたいだけです。実際に

答えて

2

https://speakerdeck.com/u/tomdale/p/emberjs-more-than-meets-the-eyeスライド55

それは、現在のグッドプラクティスと最新かどうかは分かりませんが、モデル管理(作成/編集/削除が)どこにも表現されていないことのようです。それはビューイベント、およびconnectionsOutletsメソッドに応答して行う必要があります。だから最初の例は私のためによく見えます。 また、このスライドでは、コントローラーにはロジックがほとんど含まれていないはずですが、実際には「ロジックはほとんどありません」とは何ですか?

私たちは他のアドバイス、特に経験豊かなemberユーザーからのあなたの質問は私にとって非常に重要です。

4

Sproutcore(Sproutcoreから派生したEmberに該当しない場合、誰かが話すでしょう)では、コントローラはほとんど常にダムのプロキシであるべきです。彼らは何もしません。

Emberに当てはまると仮定すると、ロジックをそこに移しません。

推奨アドバイスは、ルートがちょうどコントローラ内の他の のロジックで正しいコントローラに正しいコンセントを割り当てる の世話を持っているように思われます。

私は正しいと思います。私がオンラインで見る例から、ルートは単なる状態です。 github, this linkに行くと、Routes extends Statesが表示されます。したがって、アプリケーションレベルのイベントはルート(つまり州)で処理する必要があります。ここでは、関連オブジェクトを取得して適切なコントローラに配置します。

5

私はティルデチームとのやりとりが少しありました。トムデールは、hvgotcodesの提案に従って教えてくれました。

は、しかし、ピーターWagenetと協議した後に発生した改良は:私のinterrogation、ピーター&イェフダmitigated位置への応答として、我々はトムの説明から開催されました。

だから私は言って全体像をまとめたものになります。

  • 行動が
  • 、ルートのイベントハンドラでは、高レベルで符号化されなければならない。しかし、因数分解の低レベルプリミティブかもしれ(/してください)コントローラ内にローカライズする必要があります。

理由は、アプリ全体の一貫性のある動作を保証するために、アプリ内のすべての可能な処理を開くのではなく、特定のルート内で処理する必要があります。

関連する問題