Ответ 1
setupController
предназначен в первую очередь для динамического создания некоторого контекста контроллера. В вашем примере, если заголовок всегда будет "Hello world!" это прекрасно, чтобы установить его в объявлении класса.
По умолчанию setupController
устанавливает свойство model
controller
в значение, возвращаемое с model
hook маршрута.
Вы также можете использовать это, например, для установки модели другого контроллера или для установки некоторого начального состояния контроллера, которое зависит от модели.
Например, предположим, что у вас есть следующее:
// 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);
}
}
});
В принципе, это для "инициализации" контроллера (настройка модели и состояние по умолчанию).