從Water那裡看到的:
右邊RecentPost那欄,應該在當總文章數大於目前要顯示的文章數(numPosts)時,顯示「下一頁」的符號提供切換。但根據原本的設計,如果目前的文章數恰好等於numPosts,或是numPosts的倍數,則也同樣會出現「下一頁」的按鈕。
以下以numPosts=10為例。比如目前我的blog上面分類為lyric的文章只有10篇,那當我按下這個label之後,右邊會顯示這10篇文章的標題,以及「下一頁」的按鈕出來。但是實際上並已經沒有下一頁了,所以此時按了下一頁什麼事都不會發生。這就是那個小小的bug所在。這一樣的問題在文章數目為10的倍數時會反覆發生。
這邊其實有點麻煩,因為根據原本的作法,fetchPosts function會去取得10筆文章的資料進來,所以updateLabelPosts這個function裡面,並不知道這個label全部有幾篇文章,所以只能根據目前如果有10筆post時,就顯示出下一頁的按鈕。雖不精確,但也堪用了。
剛剛沒事想到一個小方法,也就是我們可以多設一個參數,讓他每次fetch多一筆資料,也就是11筆,但是每次顯示還是都只show出10筆,也就是說,當只要我有fetch到第11筆時,就顯示「下一頁」出來,這樣應該就符合需求了吧。
既然有bug當然要修正一下囉,不過原作者的修改方法會在neo.js多加一個fetchNum的參數,認為太麻煩的我就再把他修改一下啦。
原作者的做法是在找到function fetchPosts(label)之後將numPosts修改為fetchNum,但這裡我們把它改為numPosts+1。例如我將numPosts設為10,他會自動去fetch 11篇文章:
function fetchPosts(label) {
var labelposts = document.getElementById("LabelPosts");
var labeltitle = document.getElementById("LabelTitle");
labeltitle.innerHTML = "<h2><img alt='Indicator' src='http://bloggerhacked.googlepages.com/indicator.gif'/> Updating...</h2><hr/>";
if (label == '') {
feedurl = blogurl + 'feeds/posts/default?orderby=published&start-index=' + startIndex + '&max-results=' + (numPosts+1) + '&alt=json-in-script&callback=updateLabelPosts';
} else {
label = label.replace(" ", "%20");
feedurl = blogurl + 'feeds/posts/default/-/' + label + '?orderby=published&start-index=' + startIndex + '&max-results=' + (numPosts+1) + '&alt=json-in-script&callback=updateLabelPosts';
}
和原作者做法一樣,在function updateLabelPosts(json)加上break,讓他顯示到第10篇文章的時候就停止,避免「最新文章」把11篇都顯示出來。
for (var i = 0; i < json.feed.entry.length; i++) {
if(i==numPosts)
break;
var entry = json.feed.entry[i];
var selfurl;
最後在將function updateLabelPosts(json)找到numPosts並將其修改成numPosts+1,令「下一頁」在有fetch到11篇文章的時間才顯示。
if (json.feed.entry.length == numPosts+1) {
disp = disp + '<a href="javascript:fetchOlderPosts(\'' + label + '\');">Older >></a>';
}
disp = disp + '</p>';
labelposts.innerHTML = disp;
大功告成,這樣的做法將來只需要修改numPosts一個參數就可以了。
發佈留言