19

我注意到可枚举的 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'])

触发器watcher1watcher2

以及以下内容:

c.get('things').setObjects(['1', '2'])

也触发watcher1watcher2

就像这样:

c.get('things').addObject('v')

那么有什么区别吗?我们什么时候应该使用一个与另一个?

谢谢!凯文

4

1 回答 1

26

@each如果您需要观察数组元素的属性,请使用

@each支持观察数组内元素的属性。例如,people.@each.name。括号表示法不支持这一点。这是一个jsbin 演示

@eachArray 实例的属性,它返回处理委托的EachProxy实例。另一方面,[]简单地返回this

如果[]您需要它来处理非数组枚举,请使用

根据 ember 更改日志,括号符号@each在 ember 0.9.4中已失效,但随后在0.9.8中重新启用。重新启用它的提交表明它[]可以用于非数组枚举,例如Ember.Set实例。jsbin 演示

于 2013-07-26T00:25:10.827 回答