2016-01-04 2 views
1

У меня есть свойство списка элементов карты.Сброс и обновление свойства списка в полимере 1.0.rc

@property 
List<Map<String, dynamic>> items = [ 
    {'name': 'Acrid', 'checked': false}, 
    {'name': 'Fishy', 'checked': false} 
    ]; 

, которые отображаются, когда условие if равно true.

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

Условный, если устанавливается с помощью кнопки бумаги переключения:

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

В то время как интерфейс переключает, как и ожидалось,

set('items', data); 

не кажется, чтобы сбросить элементы - старое проверенное состояние флажков остается. Похоже, что свойство items не обновляется.

Можете ли это обновление принудительно каким-либо образом?

PS Возможно, проблема связана с тем, что флажки находятся в вложенном шаблоне? Если это так, есть ли способ преодолеть эту проблему?

Благодаря

+0

Это код! Можете ли вы попытаться создать минимальный пример - удалите как можно больше кода, сохранив воспроизводимость проблемы. Это хорошая практика и часто выявляет проблему. –

+0

Я создал небольшой проект, который генерирует ту же ошибку. Однако это почти то же самое, что и выше. Хотелось бы, чтобы я мог опубликовать папку здесь или какой-нибудь другой вариант. –

+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>>(); 

ничего не делать, потому что вы, вероятно, присвоить этот список еще раз и полимер признает, что нет никаких изменений.

Также template is="dom-repeat использует

items = "{{items}}" 

почему вы установили data?

+0

Резервирование было для моей собственной проверки. Понял. Замена 'item ['checked']' с ''item.checked'' Я не понимаю. Если я использую это предложение, я получаю следующую ошибку: 'Class '_InternalLinkedHashMap' не имеет установки экземпляра 'checked ='. NoSuchMethodError: метод не найден: 'checked =' Получатель: _LinkedHashMap len: 2 Аргументы: [false] '. Сброс «данных» необходим, чтобы старые выборки были перезаписаны. Тем не менее, флажки в шаблоне не сбрасываются. –

+0

Работал! Это новое решение. Однако «данные» следует заменить на «элементы». В некоторых комментариях я вижу желтый выделенный форматированный код. Что такое разметка для этого? –

+0

'>' как первый символ строки (убедитесь, что есть пустая строка до и после такого текста). На панели инструментов редактора есть кнопка '' '(blockquote), которая добавляет'> 'в начале каждой строки выделенного текста. Я изменил свой ответ, надеюсь, это то, что вы имели в виду в своем последнем комментарии (' items' <--> 'data') –

Смежные вопросы