2013-09-25 39 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'))); 
    } 

这里,observer会火的时候,任何人peoplesignedAgreement改变性质。

然后,在回调中,我们通知观察者系统它应该查看signedCount

+3

'ListPathObserver'被标记为不推荐 - 这样做的新方法是什么? – mpg

相关问题