マイ日記才人を書き直したら今度は投票ができなくなってしまったので考えてみたんだが、やっぱり同じコードでHTML作成したいよな、ということでHTMLをサーバーサイドで作成するんではなく、サーバーサイドで埋め込みのJSON構造体を作成してそれをjavascriptで展開する方法に変えてみた。



<script language="javascript">
<!--
var hash = new NikkiSite.LocationHash();
if (hash.param['p'] > 1) {
NikkiSite.showLoading();
new Ajax.Request(app_uri + '?p=' + hash.param['p'], { asynchronous: 1,onComplete: updateList} );
} else {
var next_page = 2;
document.getElementById('next-link').onclick =
NikkiSite.ajaxNextPageCallback(app_uri, next_page, updateList);
var list = <% JSON->new(skipinvalid => 1)->objToJson([ map { NikkiSite::App::ListRecent->d2h($_) } @diaries ]) %>;
NikkiSite.HTML.mylist(list);
}
-->
</script>

<% ... %>内がHTML::Masonのコード。このNikkiSite.HTML.mylistをupdateList()コールバック内で呼ぶようにすると、一ページ目は埋め込みのデータを使い、それ以降はajaxでガンガンとってくるようになる。これでどうだ、これで!