如何通知Polymer有关对象集合中字段的更改

时间:2015-10-05 10:08:57

标签: dart dart-polymer

目前我有

@property List<DemoItem> demos = 
  [new DemoItem('a'), new DemoItem('b'), new DemoItem('c')];

...

@reflectable
void clickHandler([_, __]) {
  demos.firstWhere((d) => d.name == 'b').isActive = true);
  notifyPath('demos', demos);
}

...

class DemoItem extends JsProxy {
  @reflectable
  bool isActive = false;
  @reflectable
  final String name;
  @reflectable
  DemoElementItem(this.name);
}

HTML

<template is="dom-repeat" items="[[demos]]" as="demo" >
  <paper-item active="[[demo.isActive]]">
    <div data-demo-name$="[[demo.name]]" 
      on-click="clickHandler">[[demo.name]]</div>
  </paper-item>
</template>

active的{​​{1}}状态尚未更新,因此这不起作用,并且看起来效率也不高。 怎么做对了?

1 个答案:

答案 0 :(得分:1)

您需要通知更改的确切路径,因为列表本身是相同的实例,否则通知将被忽略。例如,这里是clickHandler的一个选项,虽然不是最有效的选项:

@reflectable
void clickHandler([_, __]) {
  var demo = demos.firstWhere((d) => d.name == 'b')..isActive = true;
  notifyPath('demos.${demos.indexOf(demo)}.isActive', demo.isActive);
}