重置和更新聚合物1.0.rc中的列表属性

时间:2016-01-04 01:32:17

标签: dart polymer-1.0 dart-polymer

我有一个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问题可能是因为复选框位于嵌套模板中吗?如果是这样,有没有办法克服这个问题?

由于

1 个答案:

答案 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