Ember的v1.0.0-rc.3文档Ember.Array
说:
您可以使用此模块中定义的方法以KVO友好的方式访问和修改数组内容.通过将属性的语法更改为.observes('*myProperty.[]'),如果[sic]数组发生更改,也可以通知成员身份.
我试图想出一个最小的例子观察数组的变化,但是无法使观察者发火.工作样本看起来像什么?
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.[]
).
这就是为什么你必须prop.[]
在Ember数组上观察奇怪的外观属性,因为Ember数组的值不是你所期望的.