InfiniteScroll — Как сбросить всю сетку?

#javascript #jquery #infinite-scroll #masonry

#javascript #jquery #бесконечная прокрутка #кладка

Вопрос:

Я использую InfiniteScroll:

 var infScroll = new InfiniteScroll( '.grid', {
  path: function() {

    var pageNumber = ( this.loadCount   1 );

    var apiUrlQuery = $('.pagination__next').attr('href')   'amp;page='   pageNumber;

    return apiUrlQuery;
  },
  responseType: 'text',
  status: '.scroll-status',
  history: false
});
  

Но теперь мне нужно реализовать поиск, так что это означает, что мне нужно обновить путь и сетку. Как это сделать?

Пока что я сделал следующее:

 $('.search-events').on('click', function() {

  infScroll.destroy();

  /* building search query */

  $('.grid-item').remove(); //Remove items visually from the grid

  var apiUrlQuery = baseUrl   "amp;"   searchBy   "="   searchTerm;
  $('.pagination__next').attr('href', apiUrlQuery); //Update search url

    infScroll.create();

    infScroll.isLoading = false;

    infScroll.loadNextPage();
})
  

При этом я выполняю новый запрос, используя новый URL, и получаю результаты, но они не выводятся на экран, также я вижу, что высота сетки по-прежнему такая же, как если бы я не удалял элементы сетки.

Есть идеи?

Ответ №1:

Я, наконец, заставил это работать:

 $('.search-events').on('click', function() {
   msnry.remove($('.grid').find('.grid-item'));
   var apiUrlQuery = baseUrl   "amp;"   searchBy   "="   searchTerm;

    $('.pagination__next').attr('href', apiUrlQuery);

    infScroll.isLoading = false;
    infScroll.canLoad = true;
    infScroll.create();

    msnry.layout();

    infScroll.loadNextPage();
})
  

Эта строка удаляет элементы из DOM, как я сделал с $ (‘.grid-item’).remove(), но также удаляет их из некоторого внутреннего массива, в котором хранятся данные.

 msnry.remove($('.grid').find('.grid-item'));
  

Кроме того, я удалил infScroll.destroy(); потому что это отсоединяет от метода load.

Ключевая часть — msnry.layout(); она перестраивает макет.

Надеюсь, это поможет кому-нибудь в будущем.