Ember的的Ember.Array
V1.0.0-rc.3文件說:使用Ember的「觀察(..)」來觀察一些陣列的修改
您可以使用此模塊中定義的方法來訪問和修改數組內容採用KVO友好的方式。通過將屬性的語法更改爲.observes('* myProperty。[]'),每當成員資格發生變化時,您也可以收到通知。
我試圖想出一個最小的例子觀察數組的變化,但不能讓觀察者火。什麼樣的工作樣本?
P.S.通知this gotcha。
Ember的的Ember.Array
V1.0.0-rc.3文件說:使用Ember的「觀察(..)」來觀察一些陣列的修改
您可以使用此模塊中定義的方法來訪問和修改數組內容採用KVO友好的方式。通過將屬性的語法更改爲.observes('* myProperty。[]'),每當成員資格發生變化時,您也可以收到通知。
我試圖想出一個最小的例子觀察數組的變化,但不能讓觀察者火。什麼樣的工作樣本?
P.S.通知this gotcha。
噢,這是我的回答!
有幾種方法可以觀察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陣列的值不是你所期待的。
感謝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
真棒...... !!! @Deif – 2013-06-22 09:20:12
你可以設置你的非工作例子的jsfiddle嗎? – intuitivepixel 2013-04-29 02:00:06