我有一个Map项目属性列表。
Template.task.helpers({
tasks: function() {return Tasks.find({}, {sort: {checked: 1}});}
});
当if条件的计算结果为true时显示的。
@property
List<Map<String, dynamic>> items = [
{'name': 'Acrid', 'checked': false},
{'name': 'Fishy', 'checked': false}
];
条件if由纸张切换按钮设置:
<template
restamp
is = "dom-if"
if = "[[normalChangedRestampedToggler]]">
<div
class = "layout horizontal wrap body auto"
id = "container">
<paper-material
pad-bottom
class = "dropdown-content layout vertical"
elevation = "5">
<paper-input
value = "{{filterValue}}"
label = "Search"
class = "margin">
<iron-icon
suffix
icon = "search"></iron-icon>
</paper-input>
<paper-menu multi
on-click = "onClickHandler">
<template
id = "repeat"
is = "dom-repeat"
items = "{{items}}"
filter = "{{filter(filterValue)}}">
<paper-item
role = "menuitemcheckbox"
toggles = "true"
active = "{{item.checked}}">
<paper-checkbox
checked = "[[item.checked]]"
checked-changed = "checkedChanged"></paper-checkbox>
[[label(item)]]
</paper-item>
</template>
</paper-menu>
</paper-material>
</div>
</template>
当UI按预期切换时,
@reflectable
void toggleNormalChangedEvent( event, [_] ) {
normalChangedRestampedToggler = !normalChangedRestampedToggler;
set('normalChangedRestampedToggler', normalChangedRestampedToggler);
switch ( normalChangedRestampedToggler ) {
case false:
for(var item in data)
{
item['checked'] = false;
}
set('items', data);
data = new List<Map<String, dynamic>>( );
break;
}
}
似乎没有重置项目 - 复选框的旧选中状态仍然存在。看来items属性不会更新。
可以通过某种方式强制进行此更新吗?
PS问题可能是因为复选框位于嵌套模板中吗?如果是这样,有没有办法克服这个问题?
由于
答案 0 :(得分:1)
这是多余的
normalChangedRestampedToggler = !normalChangedRestampedToggler;
因为这包括上面的内容(添加!
)
set('normalChangedRestampedToggler',! normalChangedRestampedToggler);
for(var item in data) {
item['checked'] = false;
}
应该是
for(int i = 0; i < items.length; i++) {
set('items.$i.checked', false);
}
data = new List<Map<String, dynamic>>( );
没有做任何事情,因为您可能再次分配相同的列表,而Polymer认识到没有任何变化。
此外template is="dom-repeat
使用
items = "{{items}}"
为什么要设置data
?