November 12, 2007

當文章數目為numPosts的倍數時

剛很無聊的又修掉一個小小的小bug。

右邊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筆時,就顯示"下一頁"出來,這樣應該就符合需求了吧。

作法如下:
1.numPosts參數原本就設定在template裡面,以這邊為例是設定為10。所以我設定一個新的全域變數var fetchNum=11;
2.修改fetchPosts function裡面的feedurl,將原本使用numPosts的地方改為用fetchNum。feedurl = blogurl + 'feeds/posts/default?orderby='+PostOrder+'&start-index=' + startIndex + '&max-results=' + fetchNum + '&alt=json-in-script&callback=updateLabelPosts';記得喔,一樣的地方都要一併改到才行。

3.為了避免RecentPost把11筆post都show出來,所以在updateLabelPosts function裡面找到下面這個地方,加入紅色部份的程式碼,讓他如果loop到第11筆的時候就跳出迴圈,即可。 ...
for (var i = 0; i < json.feed.entry.length; i++) {
if(i==numPosts) //don't list the latest post
break;
var entry = json.feed.entry[i];
...

4.最後在顯示下一頁的選項的部份function updateLabelPosts裡面的if (json.feed.entry.length == numPosts) 改為if (json.feed.entry.length == fetchNum)

如此一來,就只有在文章數超過numPosts的倍數時才會出現"下一頁"的按鈕了。

6 Comments:

好倫 said...

聽不懂-_-

你釋放出一個完美版的neo給我用吧

Unknown said...

阿倫兄不是去菲律賓了?我有修改一下文章內容,您再看看哪邊不懂,我再來修改好了啦。^^要做完美版的neo.js小的實在不敢當。東拼西湊而已,要release的話,可能還是再看看吧。

海風 said...

我將water兄你的修改方法再修了一下,不用再加上fetchNum的一個新變數了,方法如下:
http://davidchung8887.blogspot.com/2009/04/numpostsneobug.html
希望別介意我引用了你這麼長的文章^^"

Unknown said...

呵呵 當然歡迎引用囉~ 也謝謝您的回饋 :)
有興趣的朋友可以點這邊

海風 said...

Water兄,我無聊的試用Opera之下又修掉Neo的一個bug了,有興趣的請到修正Neo在Opera的bug看看。

Unknown said...

呵呵,感謝海風兄的回饋。可惜最近忙,等改天玩到opera的時候再來修改。 :)