使用Ember的"观察(..)"观察一些数组的修改

Abd*_*ull 6 ember.js

Ember的v1.0.0-rc.3文档Ember.Array说:

您可以使用此模块中定义的方法以KVO友好的方式访问和修改数组内容.通过将属性的语法更改为.observes('*myProperty.[]'),如果[sic]数组发生更改,也可以通知成员身份.

我试图想出一个最小的例子观察数组的变化,但是无法使观察者发火.工作样本看起来像什么?

PS注意到这个问题.

DF_*_*DF_ 9

哦,嘿,这是我的答案!

您可以通过两种方式观察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数组的值不是你所期望的.