2013-09-25 13 views
6

Ich habe eine Liste von Objekten (zum Beispiel Menschen), und ich dynamisch hinzufügen und aus der Liste entfernen. Ich möchte eine Abfrage über die Liste ausführen, wenn sich eine bestimmte Eigenschaft für ein Element in der Liste ändert.Wie kann ich Änderungen an Eigenschaften von Objekten in einer Liste mit Polymer-Dart abhören?

Zum Beispiel möchte ich wissen, ob bei einem Objekt in der Liste die Eigenschaft "signedAgreement" geändert wurde. Ich möchte Listener nicht manuell an jedes Objekt anhängen, ich möchte nur die Liste fragen. Wie kann ich das machen?

Mein Code:

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(); 
    } 
} 

Und mein Modellobjekt wie folgt aussieht:

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; 
    } 
} 

Antwort

5

eingeben: ListPathObserver!

diesen Konstruktor hinzufügen:

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

Hier observer wird ausgelöst, wenn eine Person in people seine hat signedAgreement Eigenschaft geändert.

Dann, im Callback, benachrichtigen wir das Observer-System, dass es signedCount gehen sollte.

+3

'ListPathObserver' ist als veraltet markiert - was ist die neue Art, dies zu tun? – mpg

Verwandte Themen