2013-09-25 4 views
6

私はオブジェクト(人など)のリストを持っており、リストに動的に追加したり削除したりします。リスト内のどの項目でも特定のプロパティが変更されたときに、リスト全体でクエリを実行したい。ポリマーダーツを使用して、リスト内のオブジェクトのプロパティの変更をどのように聞くことができますか?

たとえば、リスト内のオブジェクトに「signedAgreement」プロパティが変更されているかどうかを知りたいとします。リスナーを手動で各オブジェクトにアタッチする必要はありません。リストを尋ねたいだけです。これどうやってするの?

マイコード:

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

そして、私のモデルオブジェクトは、次のようになります。

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

答えて

5

は、入力します。ListPathObserver

は、このコンストラクタを追加します。

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

peopleですべての人が、そのsignedAgreementプロパティが変更されたときにobserverが起動します。

次に、コールバックでは、オブザーバシステムにsignedCountを送信する必要があることを通知します。

+3

'ListPathObserver'は廃止予定とマークされています - これを行う新しい方法は何ですか? – mpg

関連する問題