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

时间:2013-04-29 00:54:09

标签: ember.js

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

  

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

我试图想出一个最小的示例观察数组更改,但无法使观察者触发。工作样本看起来像什么?

P.S。注意this gotcha

1 个答案:

答案 0 :(得分: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数组的内容,这意味着你必须观察内容的数组,而不是内容本身(即不要观察{{1} },而是观察arraycontroller.content)。

这就是为什么你必须在Ember数组上观察奇怪的arraycontroller.content.[]属性,因为Ember数组的值不是你所期望的。