我注意到可枚举的mixin具有依赖于'[]'
属性的计算属性,而ember数组也具有'@each'
属性。
依赖'[]'
和'@each'
有什么区别?
我模糊的理解(如果我错了,请纠正我)是在替换数组内容时触发'[]'
。但这取决于房产本身有何不同?
考虑以下课程:
C = Ember.Object.extend({
things: null,
watcher1: (function() {
console.log('watcher1')
}).observes('things.[]'),
watcher2: (function() {
console.log('watcher2')
}).observes('things.@each')
});
我按如下方式创建一个实例:
c = C.create({things: Ember.A(['a', 'b'])});
以下内容:
c.get('things').replace(0, 1, ['z'])
触发watcher1
和watcher2
以下内容:
c.get('things').setObjects(['1', '2'])
还会触发watcher1
和watcher2
同样如此:
c.get('things').addObject('v')
那有什么不同吗?我们何时应该使用一个与另一个?
谢谢! 凯文
答案 0 :(得分:25)
如果需要观察数组元素的属性,请使用@each
@each
支持观察数组内元素的属性。例如,people.@each.name
。括号表示法不支持此功能。这是jsbin demo。
@each
是一个property of Array instances,它返回一个处理委派的EachProxy
instance。另一方面,[]
只是returns this
。
如果您需要使用[]
处理非数组枚举,请使用
根据余烬更改日志,括号中的括号0.9.4已取消括号中的@each
,但随后在0.9.8中重新启用。 The commit that re-enables it表示[]
可用于非数组枚举,例如Ember.Set
个实例。 jsbin demo