ember.js - react - ember框架



ember.js中'[]'属性和'@each'属性之间有什么区别? (1)

我注意到,可枚举的mixin已经计算了依赖于'[]'属性的属性,而'@each'数组也有'@each'属性。

依靠'[]''@each'什么'@each'

我的模糊的理解(纠正我,如果我错了)是当数组内容被替换时触发'[]' 。 但这是不是取决于财产本身?

考虑以下课程:

C = Ember.Object.extend({
  things: null,
  watcher1: (function() {
    console.log('watcher1')
  }).observes('things.[]'),
  watcher2: (function() {
    console.log('watcher2')
  }).observes('[email protected]')
});

我创建一个实例如下:

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')

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

谢谢! 凯文


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

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

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

使用[]如果你需要它在非数组枚举上工作

根据余烬更新日志,括号表示在@ 0·4·4中被@each了,但是在@each中被重新启用了。 重新启用它的提交表明[]可用于非数组枚举类型,如Ember.Set实例。 jsbin演示