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

Resetting and updating a list property in polymer 1.0.rc

我有一个地图项列表 属性。

@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>

条件 if 由纸张切换按钮设置:

  @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;
    }
  }

虽然 UI 按预期切换,但

set('items', data);

似乎没有重置项目 - 复选框的旧选中状态仍然存在。 属性 项似乎没有更新。

是否可以通过某种方式强制执行此更新?

PS 问题可能是由于复选框位于嵌套模板中吗?如果是这样,有没有办法克服这个问题?

谢谢

这是多余的

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