setupController
służy głównie do dynamicznego konfigurowania kontekstu kontrolera. W twoim przykładzie, jeśli tytuł zawsze będzie "Hello world!" dobrze jest ustawić go w deklaracji klasowej.
Domyślnie setupController
ustawi właściwość model
z controller
na wartość zwróconą przez hakowanie trasy model
.
Można także ustawić na przykład inny model kontrolera lub ustawić początkowy stan kontrolera zależny od modelu.
Na przykład załóżmy, że masz następujące elementy:
// 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'); }
});
Szablon:
<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}}
A potem zdecydować, że byłoby miło, aby włączyć tryb edycji domyślnie postow z autoEdit
równa się true
. Prawdopodobnie będziesz chciał to zrobić w trasie (od kontrolera, gdy instancja, nie wie nic na temat modelu):
App.PostRoute = Ember.Route.extend({
setupController: function(controller, model) {
this._super(controller, model);
if (model.get('autoEdit')) {
controller.set('isEditing', true);
}
}
});
Więc w zasadzie, to dla „inicjalizacji” kontroler (ustawienie modelu i stan domyślny) .
Nie do końca rozumiem, dlaczego kontekst dynamiczny nie może być obsługiwany w kontrolerze zadeklarowanym przez klasę, czy możesz podać mi przykład. – Canttouchit
Ponieważ po utworzeniu instancji kontrolera początkowo nie ma modelu, więc nie można ustawić prawidłowego stanu domyślnego, jeśli zależy to od atrybutów modelu. –
Nadal mogę ustawić haki modelu na trasie, nadal nie rozumiem. Route renderuje model do kontrolera, dlaczego ma to znaczenie, jeśli zmienię go z 'setupController' lub z klasy kontrolera – Canttouchit