2013-03-27 2 views
5

Avere il seguente modello User:è necessario dichiarare una proprietà calcolata in un modello o controller?

Sks.User = DS.Model.extend 
    firstName: DS.attr("string") 
    lastName: DS.attr("string") 

dove dovrebbe proprietà calcolato il 'fullName' essere dichiarato?

fullName: Ember.computed(-> 
    firstName = @get("firstName") 
    lastName = @get("lastName") 
    firstName = "" if firstName is `undefined` 
    lastName = "" if lastName is `undefined` 
    lastName + " " + firstName 
).property("firstName", "lastName") 

Dovrebbe essere in "UsersController" o direttamente nel modello? La documentazione di Ember dice che i campi usati solo attraverso la sessione, dovrebbero essere scritti nei controllori. Ma il problema è non ho potuto accedere 'fullName' nel modello Index:

Sks.IndexController = Ember.Controller.extend 
    needs: ['users'] 

Qui, 'fullName' era inaccessibile (dichiarata nel controllore)

{{#each user in controllers.users}} 
    <li>{{user.fullName}}</li> 
{{/each}} 

Ma è quando si tratta di nel modello.

risposta

5

In questo caso, penso che il modello sia il posto giusto per la proprietà calcolata perché ha senso solo se si hanno gli attributi firstname e lastname.

È ancora possibile inserire proprietà calcolate sul controller quando ha senso, ma immagino che una proprietà come "fullName" possa essere utilizzata in più di un punto dell'applicazione (e avere questo nel controller potrebbe costringerti a duplicare lo sforzo in diverse parti dell'app)