Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
';[]和#x27;财产和'@每个';在ember.js中的属性?_Ember.js - Fatal编程技术网

';[]和#x27;财产和'@每个';在ember.js中的属性?

';[]和#x27;财产和'@每个';在ember.js中的属性?,ember.js,Ember.js,我注意到可枚举mixin具有依赖于'[]'属性的计算属性,而ember数组也具有'@each'属性 依赖于'[]'和'@each'有什么区别 我模糊的理解(如果我错了请纠正我)是当数组内容被替换时会触发'[]'。但这与取决于房产本身有什么不同吗 请考虑以下类别的问题: C = Ember.Object.extend({ things: null, watcher1: (function() { console.log('watcher1') }).observes('thin

我注意到可枚举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'])
c.get('things').setObjects(['1', '2'])
触发
watcher1
watcher2

以及以下各项:

c.get('things').replace(0, 1, ['z'])
c.get('things').setObjects(['1', '2'])
还触发
watcher1
watcher2

还有:

c.get('things').addObject('v')
那么有什么区别吗?我们什么时候应该使用其中一种

谢谢!
Kevin

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

@each
支持观察数组中元素的属性。例如,
人。@each.name
。括号表示法不支持这一点。这是一本书

@each
是一个返回处理委托的。另一方面,
[]
很简单

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


根据余烬变更日志,括号表示法在余烬中被取消,取而代之的是
@each
,但随后在中重新启用。指示
[]
可用于非数组枚举,例如
Ember.Set
实例

当前的官方文件——清楚地说明了何时使用。