サイトにセール リストを表示するページがあり、ユーザーはそのまま下にスクロールするか、フィルターを適用できます。ユーザーがフィルターを適用せず、そのまま下にスクロールすることを選択した場合、完全に機能します。フィルターの適用を選択したら、無限スクロール インスタンスのパラメーターを更新して、フィルター処理された結果をさらに読み込むようにします。次に、最初のスクロール時に、プラグインは一度に 2 つのページを読み込もうとし、クラッシュしてバインドを解除します。
最初に無限スクロールを適用するために使用している関数は次のとおりです。
function initInfiniteScroll( $container, flag ){
//Initialize the plugin
console.log('Initializing infinite scroll');
$container.infinitescroll({
navSelector : "#paginationControl",
nextSelector : "#paginationControl a#next",
itemSelector : "#json_pen",
bufferPx : 200,
animate : false,
debug : true,
loading : {
img : "/includes/gif/loading.gif",
finishedMsg : "No more stuff.",
msgText : ""},
errorCallback : function(){
$("#loader.grid").fadeOut('normal');
}
},
function( entry_json ){
/* I'm loading a block of JSON to throw to Backbone instead of
grabbing html. */
console.log( 'Adding more stuff' );
//Parse the entries
var entries = JSON.parse( $(entry_json).html() );
//Throw them to the grid
Grid.addPage( entries );
});
//Mark it as having been applied
$container.addClass(flag);
}
Infinite Scroll を更新するコードは次のとおりです。
//Replace the pagination controls
$("#main #paginationControl").html( $("#listing_pen #paginationControl").html() );
var nextPage = $('#main #paginationControl #next').attr('href');
var basePath = nextPage.slice( 0, nextPage.length - 2 ); //Cut off the last character
//Overwrite path
$("#grid").infinitescroll({ state : { currPage : 1 },
path : [ basePath+'/', ' #json_pen' ] });
これが呼び出された後、ユーザーがスクロールしようとするとすぐに、次の 2 つのページが同時に読み込まれ、プラグインがクラッシュします。何が起こっているのかを伝えるために、いくつかのログ ステートメントを入力しました。コンソールログは次のとおりです。
loading /organize/10002/listings/all/10001/1001v/all/all/all
Updating the page scheme
initializing masonry
["math:", 1274, 1635]
in scroll calling the retrieve function
defined begin ajax
setting during ajax to true
["heading into ajax", Array[2]]
retrieving /organize/10002/listings/all/10001/1001v/all/all/all/2 #json_pen
["Using HTML via .load() method"]
["heading into ajax", Array[2]]
retrieving /organize/10002/listings/all/10001/1001v/all/all/all/3 #json_pen
["Using HTML via .load() method"]
["Error", "end"]
["Binding", "unbind"]
私が知る限り、プラグイン呼び出しの scroll 関数は 1 回取得するように見えますが、beginAjax を 2 回呼び出します。ここで何が起こっているのか誰にも分かりませんか?