目前我有
@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}}状态尚未更新,因此这不起作用,并且看起来效率也不高。
怎么做对了?
答案 0 :(得分:1)
您需要通知更改的确切路径,因为列表本身是相同的实例,否则通知将被忽略。例如,这里是clickHandler的一个选项,虽然不是最有效的选项:
@reflectable
void clickHandler([_, __]) {
var demo = demos.firstWhere((d) => d.name == 'b')..isActive = true;
notifyPath('demos.${demos.indexOf(demo)}.isActive', demo.isActive);
}