2013-04-29 103 views
6

Ember的的Ember.Array V1.0.0-rc.3文件说:使用Ember的“观察(..)”来观察一些阵列的修改

您可以使用此模块中定义的方法来访问和修改数组内容采用KVO友好的方式。通过将属性的语法更改为.observes('* myProperty。[]'),每当成员资格发生变化时,您也可以收到通知。

我试图想出一个最小的例子观察数组的变化,但不能让观察者火。什么样的工作样本?

P.S.通知this gotcha

+1

你可以设置你的非工作例子的jsfiddle吗? – intuitivepixel 2013-04-29 02:00:06

回答

9

噢,这是我的回答!

有几种方法可以观察Em.A()属性。您有.observes('a.[]'),.observes('[email protected]').observes('a.length')。这个概念和Ember中的任何属性都是一样的,你只需要直接操作数组,而观察者应该触发。很明显,使用set方法不适用于(Ember)数组,所以也许这就是您错误的地方?

我修改了旧的jsfiddle来解释一个可观察的数组(我更新了所有的最新版本)。

我认为牢记Ember Array实际上不是一个数组 - 它是一个具有一些自定义函数和属性的对象,它们实现了通常的数组javascript函数。所以你不能这样做:Em.A() = [1,2,3],因为Em.A的类型是一个对象,而不是一个数组。

另一个有用的注意事项是,ArrayControllers有灰烬阵列的内容,这意味着您必须遵守阵列内容,而不是内容本身(即不遵守arraycontroller.content,而是观察arraycontroller.content.[])。

这就是为什么你必须观察Ember阵列上奇怪的prop.[]属性,因为Ember阵列的值不是你所期待的。

+0

感谢Deif对于这个伟大的反馈和见解...是的,我没有得到一个类似的陷阱:我用(...坚持你的jsFiddle例子)'this.person.push(3)'而不是'this.person.pushObject(3)'。我们需要使用'pushObject(..)'方法让'观察者(..)'观察者触发。 [我猜这就是Ember文档所说的“符合KVO的”](http://emberjs.com/api/classes/Ember.MutableArray.html#method_pushObject)。 – Abdull 2013-04-30 00:58:41

+0

真棒...... !!! @Deif – 2013-06-22 09:20:12