1

我正在使用 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']
4

2 回答 2

0

像这样的东西应该工作:

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

当任何票被添加到任何访客时更新。

于 2013-03-26T17:55:11.437 回答
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

我使用“通知程序”作为父级上的其他属性可以绑定的通用键;当孩子中的事情发生变化时,它会导致 上的属性发生变化parent.notifier,这反过来又会触发您想要的其他属性。

这是一个 hacky 解决方法。优点是它有效,缺点是您必须跟踪孩子与父母的关系;即,对你来说,每个人都Ticket需要参考它的Visitor

于 2013-03-26T23:42:18.977 回答