如何在包含另一个数组的对象数组中指定EmberJS中的计算属性依赖项

时间:2013-03-26 17:32:43

标签: coffeescript ember.js

我正在使用EmberJS,我正在尝试设置计算属性的依赖项。访问者可以包含多个票证(一个数组),并且我可以访问包含一组访问者的对象。这是我的计算属性。将故障单添加到访问者数组中的任何访问者时,如何重新计算该属性?

App.AttendanceController = App.SlideBaseController.extend
eligibleVisitors:
    (->
        return @getElegibleVisitors()
    ).property('App.state.session.visitors.@each.type')

allEligibleVisitorsAttending:
    (->
        return _.all @getElegibleVisitors(), (visitor)->
            return visitor.tickets.length > 0 and _.any visitor.tickets, (ticket)->
                return ticket.EventID is content.Event.ID
    ).property('App.state.session.visitors.tickets')

getElegibleVisitors:->
    return _.filter App.state.session.visitors, (visitor)->
        return visitor.type isnt App.VisitorTypes['Infant']

2 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

.property('App.state.session.visitors.@each.tickets.@each')

将任何故障单添加到任何访问者时更新。

答案 1 :(得分:0)

AFAIK现在不可能,不适用于Ember 1.0。见这里:https://github.com/emberjs/ember.js/issues/541

嵌套的@each属性不会正确触发观察者。

我遇到了类似的问题(嵌套树结构) - 我通过让每个子节点都有一个父节点的引用属性,然后添加

来解决它
Node = Ember.Object.extend
  nodeParent: null # to point at parent
  nodeChanged: (->
      @get('nodeParent')?.notifyPropertyChange 'notifier'
  ).observes 'various', 'properties

我使用'notifier'作为父级别的其他属性可以绑定的通用键;当孩子的事情发生变化时,它会导致parent.notifier上的属性发生变化,从而触发你想要的其他属性。

这是一项糟糕的工作。另外一方面是它有效,缺点是你必须跟踪孩子与父母的关系;也就是说,对于您,每个Ticket都需要引用其Visitor