Рандомизировать набор данных в репитере Wix - PullRequest
0 голосов
/ 08 июля 2020

Я создаю веб-сайт в Wix и пытаюсь создать что-то вроде генератора фактов Mental Floss (https://www.mentalfloss.com/amazingfactgenerator) на своем веб-сайте.

У меня есть набор данных готов к go и связал его с повторителем, но у меня есть некоторые проблемы с рандомизацией информации, поступающей из набора данных, и с получением повторителем отображать только одну запись из базы данных за раз, а затем другую запись в refre sh.

Код, который я использовал для рандомизации базы данных, выглядит следующим образом:

let items;
function shuffleArray() {
 let itemsLength = items.length, lastItem, randomIndex;
 while (itemsLength) {
      randomIndex = Math.floor(Math.random() * itemsLength--);
      lastItem = items[itemsLength];
      items[itemsLength] = items[randomIndex];
      items[randomIndex] = lastItem;
  }
 return items;
}
$w.onReady( () => {
  $w("#dataset1").onReady( () => {
    $w("#dataset1").getItems(0, 1000)
    .then( (results) => {
      items = results.items;
    $w("#repeater1").data = shuffleArray(items);
  })
  })
})

У меня есть нет знания кодирования, поэтому я действительно возиться здесь в темноте, извините.

Любая помощь по рандомизации набора данных и отображение только одной записи из набора данных за раз было бы потрясающе.

Спасибо!

1 Ответ

0 голосов
/ 09 июля 2020

Если вы хотите случайным образом отображать данные в репитере, не используйте набор данных. Запрашивайте коллекцию базы данных напрямую с помощью Wix Data API и вставляйте значения в репитер. не забудьте изменить идентификатор коллекции заполнителей, указанный выше, на фактический идентификатор коллекции базы данных. Как вы можете видеть в приведенном выше коде, я получаю элементы из базы данных и вызываю функцию перемешивания, которая рандомизирует ваш массив, как показано ниже.

function shuffle(array) {
    var 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;
    }
    return array;
}

После перемешивания моего массива я устанавливаю данные повторителей на перетасованный массив. Мне также нужно настроить ретранслятор для отображения значений, поэтому мы используем для этого onItemReady (), как показано ниже.

export function repeater1_itemReady($item, itemData, index) {
    $item("#name").text = itemData.name;
    $item("#number").text = itemData.number;
    $item("#website").text = itemData.website;
}

В приведенном выше коде я создал функцию onItemReady из панели свойств. Вам нужно будет изменить все идентификаторы элементов на свои собственные и настроить код в соответствии с вашими потребностями.

Отображается только 1 элемент:

Заполнится приведенный выше код повторитель со всеми элементами (в случайном порядке), но поскольку вам нужен только один элемент за раз, мы просто выбираем первый элемент для отображения, внося небольшое изменение в оператор .then () нашего wixData.query ()

$w("#repeater1").data = [random[0]];
...