2017-06-14 122 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