2013-03-27 13 views
5

uwzględniając następujący model użytkownika:czy właściwość obliczana powinna być zadeklarowana w modelu lub kontrolerze?

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

gdzie powinien obliczane własność '' fullname zostać zgłoszone?

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

Czy powinien znajdować się w "ControllerController" lub bezpośrednio w modelu? Dokumentacja Ember mówi, że pola używane tylko podczas sesji powinny być napisane w kontrolerach. Ale problemem jest to, że nie może uzyskać dostępu „” fullname w szablonie index:

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

Tutaj „fullname” był niedostępny (zadeklarowane w kontrolerze)

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

ale to jest, kiedy to w modelu.

Odpowiedz

5

W tym przypadku myślę, że model jest właściwym miejscem dla wyliczonej właściwości, ponieważ ma sens tylko wtedy, gdy masz atrybuty firstname i lastname.

Nadal możesz umieszczać obliczone właściwości na kontrolerze, gdy ma to sens, ale wyobrażam sobie, że właściwość taka jak "fullName" może być używana w więcej niż jednym miejscu w całej aplikacji (a posiadanie tego w kontrolerze zmusiłoby Cię do duplikowania wysiłek w różnych częściach aplikacji)

Powiązane problemy