Ember 的 v1.0.0-rc.3 文档Ember.Array
说:
您可以使用此模块中定义的方法以 KVO 友好的方式访问和修改数组内容。如果 [原文如此] 通过将属性的语法更改为.observes('*myProperty.[]')来更改数组,您还可以在成员资格时收到通知。
我试图想出一个最小的例子来观察数组的变化,但不能让观察者着火。工作样本是什么样的?
PS 注意这个问题。
Ember 的 v1.0.0-rc.3 文档Ember.Array
说:
您可以使用此模块中定义的方法以 KVO 友好的方式访问和修改数组内容。如果 [原文如此] 通过将属性的语法更改为.observes('*myProperty.[]')来更改数组,您还可以在成员资格时收到通知。
我试图想出一个最小的例子来观察数组的变化,但不能让观察者着火。工作样本是什么样的?
PS 注意这个问题。
哦,嘿,这是我的答案!
有几种方法可以观察Em.A()
属性。你有.observes('a.[]')
,.observes('a.@each')
和.observes('a.length')
. 这个概念和 Ember 中的任何属性都是一样的,你只需要直接操作数组并且观察者应该触发。显然,使用该set
方法不适用于(Ember)数组,所以也许这就是你出错的地方?
我已经修改了我的旧jsfiddle以考虑一个可观察的数组(我也将所有内容都更新到了最新版本)。
我认为重要的是要记住 Ember 数组实际上并不是一个数组 - 它是一个具有一些自定义函数和属性的对象,这些函数和属性实现了您通常的数组 javascript 函数。所以你不能做这样的事情:Em.A() = [1,2,3]
,因为类型Em.A
是一个对象,而不是一个数组。
另一个有用的注意事项是 ArrayControllers 有一个 Ember 数组的内容,这意味着您必须观察内容的数组,而不是内容本身(即不观察arraycontroller.content
,而是观察arraycontroller.content.[]
)。
这就是为什么您必须观察 Ember 数组上看起来怪异的prop.[]
属性的原因,因为 Ember 数组的值不是您所期望的。