我认为你的问题分为三个部分:
1. 如何观察一个集合
2. 观察者的一般概念
3. 管理关系
观察一个集合:
@each属性可以帮助观察集合中项目的属性:segments.@each.isSelected
一般的观察者:
在函数上使用.observes()是设置观察函数的速记方法。如果你的目标是更新一个集合,你最好使用.property(),它会设置一个观察器并将函数视为属性。
selectedSegments: function() {
return this.get('segments').filterProperty('isSelected', true);
}.property('segments.@each.isSelected')
这意味着selectedSegments
是从此对象中选择的片段子集,会随着项目被拖放或标记为选定而自动管理。
管理关系
对于普通的Ember对象,您需要管理关系,将新项目推入数组等。
segments = Em.A(), //somehow you are managing this collection, pushing segments into it
请注意Ember对象和Ember模型之间的区别。Ember Data是一个可选的附加库,允许指定模型和关系,并帮助您管理模型。使用Ember Data,您可能会有以下内容:
App.Source = DS.Model.extend({
segments: DS.hasMany('segments'),
selectedSegments: function() {
return this.get('segments').filterProperty('isSelected', true);
}.property('segments.@each.isSelected')
});
应用程序和App.Semgent
App.Segment = DS.Model.extend({
selection: DS.belongsTo('selection')
});