2017-06-14 4 views
1

Ich habe eine Komponente, die ein Array von Elementen beobachtet:eine Änderung in einem boolean-Array

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

Das funktioniert gut, wenn ich ein Array von Objekten mit einer boolean-Eigenschaft.

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

Wie kann ich jedoch beobachten, wenn eine Reihe von Booleans eine Wertänderung haben? Das Array wird immer die gleiche Größe haben.

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

Antwort

0

Sie müssen KVO verwenden (KeyValueObservable) konforme Methoden zur Modifizierung, Zum Hinzufügen Sie pushObject müssen statt push und für eine Änderung, die Sie benötigen addObject zu verwenden, nur dann werden entsprechende Beobachter ausgelöst werden.

In Ihrem Fall reicht der abhängige Schlüssel items.[] aus. Sie sollten nicht verwenden (ich denke, es ist veraltet, aber ich bin mir nicht sicher, wie auch immer Sie items.[] verwenden können, kümmert es sich um das Hinzufügen/Löschen von Elementen).

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 zum Spielen

+0

Ich füge nicht oder Löschen von Elementen. Es ist ein Array fester Größe. Das einzige, was ich mache, ist die Bool-Werte zu ändern. –

+0

also sollten Sie wie folgt this.get ('items') verwenden. Replace (1,1, [true]); ', es wird den Beobachter auslösen, wenn Sie es nicht so machen wollen, dann gibt es' notifyPropertyChange'-Methode, die Sie aufrufen können, wird dies den gesamten Oberserver zum Feuern veranlassen. [Modified twiddle] (https://ember-twiddle.com/e3d9b68b3aa616abbda687490ec874bd?openFiles=controllers.application.js%2C) – kumkanillam

Verwandte Themen