nextSelector не обновляется в бесконечной прокрутке

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

function callInfScroll(newlink){
var $container = '#main';
$('#page-nav').find('a').attr('href',newlink);
$container.load(newlink, function(){
  $container.infinitescroll({
    loading: {
        finishedMsg: "This is it"
    },

    navSelector  : '#page-nav',
           // selector for the paged navigation 
    nextSelector : '#page-nav a',
                   // selector for the NEXT link (to page 2)
    itemSelector : '.item',
                   // selector for all items you'll retrieve
    errorCallback: function(){
        $('#page-nav').html("Congratulations! You have reached the end of internet.");
        $('#page-nav').css({display: 'block'});
    }
  });

});
}

Проблема в том, что хотя значение #page-nav a меняется, это изменение не отражается в бесконечной прокрутке и по-прежнему принимает старое значение из первой вкладки.

Изменить: мой HTML:

    <div id="main-container" class="span8">
        <div id="main">
        </div>
        <div id="page-nav">
            <a href=""></a>
        </div>    

    </div>

person soundswaste    schedule 15.03.2013    source источник


Ответы (2)


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

Плагин хранит путь и текущую страницу внутри некоторой переменной... Так что не имеет большого значения, измените ли вы ссылку page_nav.

Таким образом, вам нужно не только изменить URL-адрес, но и изменить переменные, хранящиеся в плагине.

Прежде всего, вам нужно понять, что бесконечная прокрутка разделяет ваш URL-адрес на две части: URL-адрес и НОМЕР СЛЕДУЮЩЕЙ СТРАНИЦЫ.

Считайте, что это ваш page_nav.

<div id="page_nav" style="display: none;">
    <a href="http://localhost/trunx/blog/page/all/4">Próxima Página »</a>
</div>

В этом случае плагин сохраняет мой URL в opts.path[0].

http://localhost/trunx/blog/page/all/

И сохраняет текущую страницу в opts.state.currPage.

Допустим, ваш новый URL выглядит так:

http://localhost/trunx/blog/page/programing/1

Вы можете видеть, что в этом новом URL я изменил категорию с все на программирование и страницу с 4 на 1. >

Я сделал следующее:

var newPath = 'http://localhost/trunx/blog/page/programing/';
var newPage = 1;

// Changes the page_nav href.
$('#page_nav a').attr('href', newPath+newPage);

// Changes the plugin's stored variables
$('.postsBlog').infinitescroll({path:[newPath,''],state: {currPage:newPage-1}});

// This resets the pagination binder so if you had reached the end,it will now start paginating again.
$('.postsBlog').infinitescroll('bind');

Учтите, что .postsBlog — это контейнер, к которому применяется мой бесконечный прокрутка.

Вы можете видеть, что когда я устанавливаю новую currPage, я вычитаю из нее 1. Это потому, что Infinity Scroll автоматически суммирует 1 при настройке следующей страницы.

person Diego Riccio TrunX    schedule 17.12.2013
comment
Теперь есть настройка path, где вы можете определить свою собственную логику для построения URL-адреса следующей страницы. Это будет выполняться каждый раз и принимать значение, которое вы там вернули. stackoverflow.com/questions/24442592/ - person Lepi; 27.09.2014

Трудно сказать без страницы, с которой можно поэкспериментировать, но...

Если вы не удалите содержимое с первой вкладки, похоже, что вы получите несколько элементов на странице с одним и тем же идентификатором ("#page-nav"), что является незаконным в CSS. Вы, вероятно, обнаружите, что jQuery просто возвращает первый. Вы можете рассмотреть возможность использования решения на основе классов вместо идентификаторов.

person jnpdx    schedule 15.03.2013
comment
Извините за путаницу. Я отредактировал содержимое. На странице только один page-nav, href которого я редактирую.. - person soundswaste; 15.03.2013
comment
Вы уверены, что вызов load() действительно вызывается снова? Похоже, он может запускаться только один раз (при загрузке страницы). - person jnpdx; 15.03.2013
comment
Да, нагрузка вызывается. Вся функция callInfScroll вызывается каждый раз при нажатии кнопки на вкладке. Я подозреваю, что есть что-то подозрительное в плагине прокрутки. - person soundswaste; 15.03.2013