-
Wavesを試してみる - View編 2008-03-14 00:59:43
昨日に引き続き、webフレームワークのWavesを試してみます。今日はビューから。
ビューのファイルはtemplatesディレクトリ下にあるみたい。チュートリアルでは、entry用のビューのためにentryディレクトリを作れと書いてある。mkdir templates/entry
で、このtemplatesディレクトリ下にはlayoutsディレクトリとerrorsディレクトリが存在しているのだけど、名前から想像できるようにlayouts/default.mabが、Railsでいうapp/views/layouts/application.html.erbに該当するみたい。
doctype :html4_strict html do head do title @title end body do layout_content end endえっと、これはなんだろう。気づいてみれば、拡張子も.mabとなっている。やっていることは見れば理解できるけど…。
どうやらこれはMarkabyというRubyっぽいテンプレートエンジンだそうです(Markup as Rubyの略らしい)。これは簡潔でいいね。と、言いたいところだけど、これってデザイナさんは置いてけぼりだ。ひとりで開発するなら全然ありだけど、チーム開発では難しいかな。WavesはMarkabyの他にもErubisをサポートしているので、そっちを使うのもいいかも。
でもぼくはErubisよりもMarkabyが使いたいと思っているようなのでこのまま進めます。
チュートリアルでは、templates/entry/list.mabとして以下のコードを書けと言っている。layout :default, :title => 'Blog Entries' do h1 'My Blog' @entries.each do |entry| view :entry, :summary, :entry => entry end endlayoutというヘルパーが、default.mabでのlayout_contentにyieldされるみたい。Railsとちがって、これは指定してあげないといけないみたい。ここで引数に:title を指定しているけど、これがdefault.rbでは@titleになるんだな。
@entriesには、Entryモデルのデータが勝手に入っているらしい。コントローラでモデルから取り出すわけじゃないの? 詳細はのちほどと書かれているので、とりあえずスルーしておこう。
そしてイテレータブロックの中のviewヘルパーが、Railsでいうところの render に当たるようだ。 これは、Railsで書くならこんな感じのことを意味しているみたい。<%= render :partial => "entry/summary", :locals => {:entry => entry} %>さて、呼び出され側のsummary.mabは以下のとおり。
h2 do a @entry.title, :href => "/entry/#{@entry.name}" end textile @entry.summary a 'Read more ...', :href => "/entry/#{@entry.name}"内容は見てのとおり。URLがRailsとは違ってid値を使っていない。個人的にはこっちのほうが好みだけど、この場合だとブログの記事名をユニークにしないといけなくるなる。まいっか。
textileというヘルパがよくわからないけど、ちゃんと説明がない。とりあえずスルー。
ビューに関しては以上。で、サーバを起動する。
waves-server
おー立ち上がった。デフォルトのポート番号は3000。このwebサーバはなんだろう。独自のものなのかな。URLは /entries。間違って、/entryにアクセスしたらカラフルなエラーページが表示された。カッコいい。
で、まだshowの画面がないので作れと書いてある。
layout :default, :title => @entry.title do h1 @entry.title textile @entry.content end
これでとりあえずは動きます。コントローラやURLルーティングはいつ書くんだ。というか書かなくてもこのくらいは動くんだね。
それからcreate。チュートリアルではlist.mabにフォームを追加しているけど、そこはviewを使って書いてみた。
layout :default, :title => 'Blog Entries' do h1 'My Blog' view :entry, :form @entries.each do |entry| view :entry, :summary, :entry => entry end endform.mabは、
form :action => '/entries', :method => 'post' do label 'Name' input :type => :text, :name => 'entry.name' input :type => :submit, :value => 'Add' end
こんな感じ。Rails同様、WavesもRESTfulなURLを採用しているみたいで、createはリストに対してpostメソッドを送っている。
それから編集用のページをeditor.mabとして作成してみる。layout :default, :title => 'Edit Entry' do form :action => "/entry/#{@entry.name}/", :method => 'POST' do label 'Title'; br input :type => :text, :value => @entry.title, :name => 'entry.title'; br label 'Summary'; br textarea @entry.summary, :name => 'entry.summary', :rows => 10, :cols => 80; br label 'Content'; br textarea @entry.content, :name => 'entry.content', :rows => 20, :cols => 80; br input :type => :submit, :value => 'Save' end endここでは、個別のentryに対してpostメソッドを送っている。RailsみたいにPUTではないらしい。
ビューはとりあえずこんな感じかな。

コメント(
リンク元(49)