Компьютерная привязка не обнаруживает изменений в списке железа - PullRequest
0 голосов
/ 07 мая 2019

Полимер 1, у меня в железном списке:

  <iron-list
    id="ironList"
    scroll-target="[[ironListScrollTarget]]"
    items="[[itemCollectionCopy]]">

    ...

        <div class="text center-justified info-icon">
          <iron-icon
            hidden="[[!_isDirtyData(item.*, itemCollectionCopy)]]"
            role="img"
            aria-label="Check-out information has been modified"
            title="Check-out information has been modified"
            icon="icons:info-outline"></iron-icon>
          <iron-icon
            hidden="[[_isDirtyData(item.*, itemCollectionCopy)]]"
            role="img"
            class="pristine-data"
            aria-label="Check-out information has been modified"
            title="Check-out information has been modified"
            icon="icons:info-outline"></iron-icon>
        </div>

    _isDirtyData: function(item) {
      console.log(item);
      return item.base.preferences;
    },


    setCustomPreference: function(e) {
      const id = e.detail.data.clientId;
      const preferences = e.detail.data.preferences;

      const foo = this.itemCollectionCopy.map((item) => {
          if (item.client_id === Number(id)) {
            item.preferences = preferences;
          }
          return item;
      });

      this.itemCollectionCopy = [];
      this.itemCollectionCopy = [...foo];
    },

При добавлении объекта настроек в item.preferences я не смог получить вычисленную привязку hidden="[[_isDirtyData(item.*)]]" для обнаруженияперемена.Вместо этого мне пришлось добавить весь массив itemCollectionCopy в hidden="[[_isDirtyData(item.*, itemCollectionCopy)]]", что кажется чрезмерным.

Почему вычисленная привязка не обнаружит изменение всего за hidden="[[_isDirtyData(item.*)]]"?

1 Ответ

0 голосов
/ 29 мая 2019

Способ, которым полимер наблюдает за изменениями в свойствах, не идеален, и они добавили несколько методов мутации массива, чтобы изменить массив и уведомить шаблоны об этих изменениях.

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

https://polymer -library.polymer-project.org / 1,0 / Docs / devguide / модель-данные # работа-с-массивов

Иногда вы хотите выполнить операцию способом JS, или просто не существует метода мутации массива, адаптированного для вашего случая.

Существует метод notifyPath, который также может помочь.

this.notifyPath('myarray.*'); 
Например,

вызовет всех соответствующих наблюдателей.

...