2017-06-14 101 views
1

的變化我有一個觀察項目的數組組件:觀察在布爾陣列

itemsChanged: Ember.observer('items', 'items.[]', '[email protected]' function() { 
    // ...code... 
}), 

能正常工作時,我有對象了布爾屬性的數組。

Array(arraySize).fill(false, 0).fill(true, 0, 1).map(model => WrapperBool.create({ model })) 

但是,當布爾值數組的值發生變化時,我該如何才能觀察它?該數組將始終具有相同的大小。

Array(arraySize).fill(false, 0).fill(true, 0, 1) 

回答

0

您需要使用KVO(KeyValueObservable)進行修改, 兼容的方法來增加您需要pushObject而不是push和你需要使用addObject修改,只有相應的觀察者將被觸發。

在你的情況下,從屬關鍵items.[]就足夠了。你不應該使用[email protected](我認爲它已棄用,但我不確定,無論如何,你可以使用items.[]它會關心添加/刪除項目)。

的application.js,

import Ember from 'ember'; 
export default Ember.Controller.extend({ 
    items:[true,false], 
    itemsChanged:Ember.observer('items.[]',function(){ 
    console.log(' items ',this.get('items')); 
    }), 
    actions:{ 
    test(){  
     this.get('items').addObject(true); 
    } 
    } 
}); 

application.hbs

<h1{{action 'test'}}>Welcome to {{appName}}</h1> 
{{items}} 

sample twiddle

+0

我不添加或刪除項目。這是一個固定大小的數組。我唯一要做的就是改變布爾值。 –

+0

所以你應該像這樣'this.get('items')。replace(1,1,[true]);',它會觸發觀察者,如果你不想這樣做,那麼有' notifyPropertyChange'方法,你可以調用,這將通知所有的oberserver火.. [Modifed twiddle](https://ember-twiddle.com/e3d9b68b3aa616abbda687490ec874bd?openFiles=controllers.application.js%2C) – kumkanillam