Flickrの出力をページ化する
Flickrはリクエストの1ページだけを送ってくる。Flickrへのリクエストのoptionsを作ったときには,ページあたり30個のイメージを意味する:per_page=>30というエントリがあった。searchボタンをクリックしたときにcreate(document.keyword.value, 1)を呼び出すとき,2番目の引数はFlickrにクエストの1ページ目を要求している。だから任意のページを得るためには,createメソッドにその値を与えれば,該当のページを渡してくる。再利用するって言ったでしょ! generate_pagesを実装するには,そのページへのリンクをレンダリングすればよく,hook_page_eventsを実装するには,各ページリンクに指定のページでcreateを呼び出すようにフックする必要がある。簡単だね。
def generate_pages render = "" if @flickr['photos']['total'].to_i > 0 num_pages = @flickr['photos']['pages'].to_i > 10 ? 10 : @flickr['photos']['pages'].to_i num_pages.times { |i| render += page(i + 1) } if num_pages > 1 end render end def page(i) tag(:a, :href => 'javascript:void(0)', :id => "#{i}") { "#{i}" } end def hook_page_events(div) $app.document.get_element_by_id(div.to_s.to_clr_string).children.each do |child| if child.id.to_s.to_i == @current_page child.css_class = "active" else child.onclick { |s, args| $app.create(@tags, child.id.to_s.to_i) } end end end
あとは保存して,リロードして,検索して,歌って,踊って… きれいなページングアクションが見られるはずだ。