2013-09-25 6 views
6

Ho un elenco di oggetti (ad esempio, persone) e aggiungo e rimuovo dinamicamente dall'elenco. Voglio eseguire una query nell'elenco quando una determinata proprietà cambia su qualsiasi elemento nell'elenco.Come posso ascoltare le modifiche alle proprietà sugli oggetti all'interno di un elenco, con il dardo del polimero?

Ad esempio, voglio sapere se qualsiasi oggetto nell'elenco ha la sua proprietà "signedAgreement" modificata. Non voglio collegare manualmente gli ascoltatori a ciascun oggetto, voglio solo chiedere l'elenco. Come posso fare questo?

Il mio codice:

library my_element; 

import 'package:polymer/polymer.dart'; 
import 'dart:html'; 
import 'models.dart'; 

@CustomTag("my-element") 
class MyElement extends PolymerElement with ObservableMixin { 
    final List people = toObservable([]); // observe adds/removes to the list 
    final Person newPerson = new Person(); 

    // How can I know when to re-evaluate signedCount? 

    int get signedCount => people.where((Person p) => p.signedAgreement).length; 

    void save(Event e, var detail, Node target) { 
    people.add(new Person.from(newPerson)); 
    newPerson.blank(); 
    } 
} 

E il mio oggetto del modello si presenta come:

library models; 

import 'package:polymer/polymer.dart'; 

class Person extends Object with ObservableMixin { 
    @observable String name; 
    @observable bool signedAgreement = false; 

    Person(); 

    Person.from(Person other) { 
    name = other.name; 
    signedAgreement = other.signedAgreement; 
    } 

    blank() { 
    name = ''; 
    signedAgreement = false; 
    } 
} 

risposta

5

Invio: ListPathObserver!

Aggiungi questo costruttore:

MyElement() { 
    ListPathObserver observer = new ListPathObserver(people, 'signedAgreement'); 
    observer.changes.listen((_) => notifyProperty(this, const Symbol('signedCount'))); 
    } 

Qui, observer sparerà quando una persona in people ha la proprietà signedAgreement cambiato.

Quindi, nella richiamata, notifichiamo al sistema di osservazione che dovrebbe andare a cercare signedCount.

+3

'ListPathObserver' è contrassegnato come deprecato - qual è il nuovo modo di farlo? – mpg

Problemi correlati