ArrayController中各个记录的计算属性

时间:2013-12-19 15:29:48

标签: ember.js

假设我有Person模型

App.Person = DS.Model.extend
  firstName: DS.attr 'string'
  lastName: DS.attr 'string'

我有一条显示所有人的路线

App.Router.map ->
  @route 'people'

App.PeopleRoute = Ember.Route.extend
  model: ->
    @store.find('person')

App.PeopleController = Ember.ArrayController.extend

  # This doesn't work
  fullName: (->
    @get('firstName')
  ).property('firstName')

如何为数组中的每个人在fullName中定义ArrayController计算属性,这样我可以做这样的事情?

{{#each}}
  {{fullName}}
{{/each}}

3 个答案:

答案 0 :(得分:0)

fullNames: (->
  @getEach('firstName')
).property('@each.firstName')

{{#each name in fullNames}}
  {{name}}
{{/each}}

答案 1 :(得分:0)

数组控制器管理对象数组,您可以定义itemController以在每个项目中使用其他方法。像这样:

App.PeopleController = Ember.ArrayController.extend
  itemController: 'person'

App.PersonController = Ember.ObjectController.extend
  fullName: (->
    @get('firstName')
  ).property('firstName')

答案 2 :(得分:0)

除了另外两个答案之外,自从提出问题后我也找到了第三个解决方案。

我们可以在模型本身上放置计算属性,这允许我们在应用程序的任何地方调用该方法。

App.Person = DS.Model.extend
  firstName: DS.attr 'string'
  lastName: DS.attr 'string'
  email: DS.attr 'string'

  fullName: (->
    "#{@get('firstName')} #{@get('lastName')}"
  ).property('firstName', 'lastName')