2012-07-22 57 views
0

我對Paul Irish的無限滾動插件有點麻煩。如果我只有1頁結果,它的效果很好,但如果我有多頁結果,它會一遍又一遍地重複最後一頁。這裏是我的無限滾動配置:無限滾動不是函數錯誤

$('#grid').infinitescroll({ 
navSelector : "#paginationControl:first", 
nextSelector : "#paginationControl a#next:first", 
itemSelector : "#grid .entry", 
debug : true, 
bufferPx : 500 
}, 
function(newElements){ 
//Apply masonry 
var $newElems = $(newElements); 
$newElems.imagesLoaded(function(){ 
    $("#grid").masonry('appended', $newElems); 
}); 
    //See if this is the last page 
if(curPage >= pages){ 
    alert("Infinite scroll is paused."); 
    $('#grid').infinitescroll('pause'); 
} 
}); 

這裏是我的分頁控件:

<?php if ($this->pageCount): ?> 
<div class="paginationControl" id="paginationControl"> 
<!-- Previous page link --> 
<?php if (isset($this->previous)): ?> 
    <a href="<?php echo $this->url(array('page' => $this->previous)); ?>" id="previous"> 
     &lt; Previous 
    </a> | 
<?php else: ?> 
    <span class="disabled">&lt; Previous</span> | 
<?php endif; ?> 

<!-- Numbered page links --> 
<div id="numberedPages"> 
<?php foreach ($this->pagesInRange as $page): ?> 
    <?php if ($page != $this->current): ?> 
     <a href="<?php echo $this->url(array('page' => $page)); ?>"> 
     <?php echo $page; ?> 
     </a> | 
    <?php else: ?> 
     <?php echo $page; ?> | 
    <?php endif; ?> 
<?php endforeach; ?> 
</div> 
<!-- Next page link --> 
<?php if (isset($this->next)): ?> 
    <a id="next" href="<?php echo $this->url(array('page' => $this->next)); ?>" > 
    Next &gt; 
    </a> 
<?php else: ?> 
    <span id="next" class="disabled">Next &gt;</span> 
<?php endif; ?> 
</div> 
<?php endif; ?> 

我想,因爲最後一頁上的下一個頁面選擇被禁用時,打到最後,將停止頁。爲什麼它會一直重複加載最後一頁,我該如何阻止它發生?

編輯:

我增加了一個,如果檢查回調函數,以試圖阻止一段時間後的滾動,通過這個問題jQuery InfiniteScroll plugin loads the last page over and over啓發。

//See if this is the last page 
if(curPage >= pages){ 
    alert("Infinite scroll is paused."); 
    $('#grid').infinitescroll('pause'); 
} 

其中頁面定義爲最後一頁可用,curPage是當前頁面,每次調用增加。該檢查工作完美的一點,但我改變了一些東西,我不知道是什麼,現在由於某種原因,現在我得到了錯誤$("#grid").infinitescroll is not a function $('#grid').infinitescroll('pause');我不知道如何無限滾動是不是一個函數在那時顯然必須是爲了讓JavaScript擺在首位。我怎樣才能擺脫這不是一個功能錯誤?

+0

你應該在這裏考慮答案:http://stackoverflow.com/questions/13708722/infinitescroll-is-not-a-function-with-yii – Silentbang 2012-12-04 17:42:23

+0

@silentbang你的錯誤是,有什麼干擾$別名,我的是因爲我試圖使用暫停功能來阻止它加載額外的頁面,而不是讓後端在無效頁面上投擲404。 – jaimerump 2012-12-04 21:46:42

回答

0

如果您給zend的paginator一個不存在的頁碼,它只會檢索最接近的有效頁碼。如果有20頁有效頁面,我試圖檢索第400頁,那麼只會返回第20頁。我將代碼添加到後端以拋出404s,並且現在按時停止。無限滾動腳本只是保持加載頁面,直到後端拋出一個錯誤,所以它不知道它正在重複自己。

if($page_num > $pager->getPages()->pageCount){ 
     $this->_response->clearBody(); 
     $this->_response->clearHeaders(); 
     $this->_response->setHttpResponseCode(404); 
    } 

我猜想,在我的分頁控件殘疾人翻頁選擇並沒有從選擇下一個頁面停止無限滾動腳本,因爲它僅使用控制找出頁面URL方案,然後簡單地遞增那裏的數字。