观察聚合物1中列表中项目属性的更改

时间:2015-10-20 19:23:19

标签: dart dart-polymer

我有一个属性

  @property final List<Item> items = [
    new Item('red', false),
    new Item('green', true),
    new Item('blue', false)
  ];

Item看起来像

class Item extends JsProxy {
  @reflectable String color;
  @reflectable bool checked;
  Item(this.color, this.checked);
}

HTML看起来像

  <template is="dom-repeat" items="{{items}}">
    <label><span>{{item.color}}</span>
      <input type="checkbox"
             value="{{item.color}}"
             checked="{{item.checked::change}}">
    </label>
  </template>

我想在任何项目中checked更改时收到通知。

1 个答案:

答案 0 :(得分:1)

可以使用@Observe('some.path')注释设置观察者。 如果路径包含.*,则使用包含更改的实际路径的更改记录调用处理程序。

@Observe('items.*')
  void updateSelectedColors(Map record, [_]) {
    String path = record['path'];
    if (path == 'items' || path.endsWith('.checked')) {
      // do something
    }
  }
}

path == 'items'适用于使用默认值初始化items属性。 path.endsWidth('.checked')确保代码(// do something)仅在实际checked属性发生更改时执行。所有其他更改都将被忽略。