setupController
è principalmente per la configurazione dinamica di alcuni contesti controller. Nel tuo esempio, se il titolo sarà sempre "Ciao mondo!" va bene impostarlo in una dichiarazione di classe.
Per impostazione predefinita, setupController
imposterà la proprietà model
di controller
sul valore restituito dal gancio model
del percorso.
È anche possibile, ad esempio, impostare il modello di un altro controller o impostare uno stato del controller iniziale che dipende dal modello.
Ad esempio, si supponga di avere il seguente:
// 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'); }
});
Template:
<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}}
E poi, si decide che sarebbe bello per attivare la modalità di modifica per impostazione predefinita per i messaggi con autoEdit
uguale a true
. Probabilmente si vorrà fare che nel percorso (in quanto il controller, quando un'istanza, non sa nulla del modello):
App.PostRoute = Ember.Route.extend({
setupController: function(controller, model) {
this._super(controller, model);
if (model.get('autoEdit')) {
controller.set('isEditing', true);
}
}
});
Quindi, fondamentalmente, è per "l'inizializzazione" del regolatore (impostazione di modello e di default dello stato) .
Non capisco perché il contesto dinamico non possa essere gestito in un controllore dichiarato di classe, puoi darmi ed esempio. – Canttouchit
Perché quando il controller viene istanziato, inizialmente non esiste alcun modello, quindi non è possibile impostare correttamente alcuni stati di default se dipende dagli attributi del modello. –
Ancora posso impostare i hook del modello nel percorso, ancora non capisco. Route è il rendering del modello sul controller perché è importante se lo cambio da 'setupController' o dalla classe controller – Canttouchit