【问题标题】:Computed property on individual record in ArrayControllerArrayController 中单个记录的计算属性
【发布时间】:2013-12-19 15:29:48
【问题描述】:

假设我有一个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')

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

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

【问题讨论】:

    标签: ember.js


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:
      fullNames: (->
        @getEach('firstName')
      ).property('@each.firstName')
      
      {{#each name in fullNames}}
        {{name}}
      {{/each}}
      

      【讨论】:

        【解决方案3】:

        在其他两个答案之上,因为提出这个问题,我也找到了第三种解决方案。

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

        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')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-02-16
          • 2019-01-27
          • 1970-01-01
          • 1970-01-01
          • 2015-05-27
          • 2020-05-17
          • 1970-01-01
          相关资源
          最近更新 更多