2013-07-26 18 views
12

Ember.jsの公式チュートリアルでは、多くの混乱している例があります。私は本当に好きではないEmber.js setupControllerとの違いは何ですか<Name>コントローラ

一つの例は次のとおりです。

App.ApplicationRoute = Ember.Route.extend({ 
     setupController: function(controller) { 
     controller.set('title', "Hello world!"); 
    } 
}); 

App.ApplicationController = Ember.Controller.extend({ 
    appName: 'My First Example' 
}); 

今、私は私がその代わりのようにそれを書かれている可能性があり、それを理解するよう:

App.ApplicationController = Ember.Controller.extend({ 
     appName: 'My First Example', 
     title: 'Hello world!' 
    }); 

そしてルートからこのsetupControllerを取り除きます。

setupControllerを使用する目的は何ですか?

答えて

20

setupControllerは、主にコントローラコンテキストを動的に設定するためのものです。あなたの例では、タイトルが常に "Hello world!"になるのであればそれをクラス宣言で設定しても問題ありません。

デフォルトでは、setupControllermodelプロパティのcontrollermodelから返された値に設定します。

たとえば、別のコントローラのモデルを設定したり、モデルに応じたコントローラの初期状態を設定することもできます。

たとえば、次のような考えてみます。

// Model 
App.Post = DS.Model.extend({ 
    title: DS.attr('string'), 
    text: DS.attr('string'), 
    autoEdit: DS.attr('string') 
}); 

// Controller 
App.PostController = Ember.ObjectController.extend({ 
    isEditing: null, 
    toggleEdit: function() { this.toggleProperty('isEditing'); } 
}); 

テンプレート:

<a href="#" {{action 'toggleEdit'}}>Toggle edit mode</a> 

{{#if isEditing}} 
    {{input type="text" value=title placeholder="Title"}} 
    {{textarea type="text" value=text placeholder="Text"}} 
{{else}} 
    <h1>{{title}}<h1> 
    <article>{{text}}</article> 
{{/if}} 

そして、あなたはautoEditを投稿するために、デフォルトで編集モードをオンにしていいだろうと判断しましたtrueに等しい。おそらく、ルート内(インスタンス化コントローラ、以来、モデルについて何も知らない)ことをしたいと思うでしょう:

App.PostRoute = Ember.Route.extend({ 
    setupController: function(controller, model) { 
    this._super(controller, model); 
    if (model.get('autoEdit')) { 
     controller.set('isEditing', true); 
    } 
    } 
}); 

だから、基本的に、それはコントローラを「初期化」のためだ(設定モデルとデフォルトの状態) 。

+0

私は、クラスと宣言されたコントローラで動的コンテキストを処理できない理由をよく理解していません。 – Canttouchit

+0

コントローラがインスタンス化されると、最初はモデルが存在しないため、モデルの属性に依存する場合、デフォルト状態を正しく設定できません。 –

+0

まだ路線にモデルフックを設定できますが、まだ分かりません。 'setupController'かコントローラクラスから変更するとどうなるのですか? – Canttouchit

関連する問題