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