Как рандомизировать порядок отображения div в Polymer - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь рандомизировать отображение div в Polymer, но у меня возникают проблемы с переводом этого поста в каркас.

Случайный порядок деления при загрузке страницы

ready() {
  super.ready();
  let cards = this.shadowRoot.querySelectorAll('.className');
  for(var i = 0; i < cards.length; i++){
    let target = Math.floor(Math.random() * cards.length -1) + 1;
    let target2 = Math.floor(Math.random() * cards.length -1) +1;
    cards.eq(target).before(cards.eq(target2));
  }

Сбой при вызове cards.eq ...

Может ли это быть решено с помощью dom-repeat?

1 Ответ

0 голосов
/ 07 июня 2018

Решение, которое вы связали, использует jQuery для выбора div s, тогда как в вашем случае cards, являющийся результатом собственного вызова querySelector, не имеет методов eq и before.

Может ли это быть решено с помощью dom-repeat?

Да: вы можете сохранить модель данных за div в свойстве и перетасовать его перед рендерингом div:

<dom-module id="my-view">
  <template>

    <!-- Render the divs using dom-repeat -->
    <template is="dom-repeat" items="[[divs]]">
      <div>{{item.name}}</div>
    </template>

  </template>

  <script>
    class MyView extends Polymer.Element {
      static get is() { return 'my-view'; }

      static get properties() {
          return {
              divs: {
                  type: Array,
                  value: [],
              }
          };
      }

      // In connectedCallback you can initialise the divs property
      // by shuffling the initial ordered array using the Fisher-Yates algorithm
      // /1866992/kak-randomizirovat-peremeshat-massiv-javascript
      connectedCallback() {
          super.connectedCallback();
          let array = [ // The ordered model behind the divs
              { name: 'Div #1' },
              { name: 'Div #2' },
              { name: 'Div #3' },
              { name: 'Div #4' },
              { name: 'Div #5' },
          ];
          let currentIndex = array.length, temporaryValue, randomIndex;
          while (0 !== currentIndex) {
              randomIndex = Math.floor(Math.random() * currentIndex);
              currentIndex -= 1;
              temporaryValue = array[currentIndex];
              array[currentIndex] = array[randomIndex];
              array[randomIndex] = temporaryValue;
          }
          this.divs = array;
      }

    }

    window.customElements.define(MyView.is, MyView);
  </script>
</dom-module>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...