'[]'属性和ember.js中的'@each'属性有什么区别?

Kev*_*hey 19 ember.js

我注意到可枚举的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')
});
Run Code Online (Sandbox Code Playgroud)

我创建一个实例如下:

c = C.create({things: Ember.A(['a', 'b'])});
Run Code Online (Sandbox Code Playgroud)

下列:

c.get('things').replace(0, 1, ['z'])
Run Code Online (Sandbox Code Playgroud)

触发器watcher1watcher2

以下内容:

c.get('things').setObjects(['1', '2'])
Run Code Online (Sandbox Code Playgroud)

也触发watcher1watcher2

同样如下:

c.get('things').addObject('v')
Run Code Online (Sandbox Code Playgroud)

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

谢谢!凯文

Jon*_*ran 26

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

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

@eachArray实例属性,它返回处理委派的EachProxy实例.另一方面,[]只需返回this.

使用[],如果你需要它在非阵列可枚举工作

根据ember changelog,括号符号@each在ember 0.9.4中被取消,但在0.9.8中重新启用.重新启用它的提交表明[]可以用于非阵列枚举,例如Ember.Set实例.jsbin演示.