| TOP>>OBAQ>>HTMLジェネレーター | 概略 | ツアー | <OBAQ> | 構成定義 | アプリケーションサーバ | リファレンス | サイトマップ |
テンプレート展開1読みこんだHtmlgen::Nodeオブジェクトのexpandメソッドを呼び出すことで、 テンプレート展開が行なわれます。 expandメソッドは引数をひとつだけ取ります。 その引数(モデルデータ)の型によって、それぞれ対応する展開処理が行なわれます。
例1# テンプレート
template = HtmlParser.parse_inline <<-END
<html>
<body>
<h1 id=title></h1>
<p id=body></p>
</body>
</html>
END
# テンプレートのID=に対応したデータ
data = {
:title => "サンプル1",
:body => "この文章が本文に挿入されます。"
}
# テンプレートを展開して出力する
tree = template.expand(data)
f = Formatter.new(true, STDOUT)
f.format(tree)この例では、最初に<html>ノードに対してハッシュが適用されます。 <html>ノードにはID属性がないので、このノードの子要素に対して、ハッシュを適用して展開処理を行います。 そして、<h1>までたどりつくとID属性がありますから、このIDの値つまり :titleをキーとしてハッシュを引きます。 そして、data[:title]の値は文字列ですから、 この文字列を<h1>の子要素とします。 同様に、<p id=body>に対しても同じことを行い、結果として下記のように展開されます。 <html>
<body>
<h1>サンプル1</h1>
<p>この文章が本文に挿入されます。</p>
</body>
</html> 例2template = HtmlParser.parse_inline <<-END
<ul>
<li id=list1>
</ul>
END
data = {
:list1 => [1, 2, 3]
}
tree = template.expand(data)
f = Formatter.new(true, STDOUT)
f.format(tree)この例では、<li id=list1>に対応する値が配列(Enumerableをincludeしたクラス)ですから、 <li>を配列の数だけ繰り返し、そのひとつひとつの値に対して、展開します。 その結果、以下のようになります。 <ul> <li>1</li> <li>2</li> <li>3</li> </ul> 例3template = HtmlParser.parse_inline <<-END
<table>
<tr id=list1><td id=name><td id=url>
</table>
END
data = {
:list1 => [
{ :name => "ruby", :url => "www.ruby-lang.org" },
{ :name => "java", :url => "java.sun.com" }
]
}
tree = template.expand(data)
f = Formatter.new(true, STDOUT)
f.format(tree)この例では、id=list1が配列であることまでは前と同じですが、 その配列の要素がハッシュなので、 trの子要素である2つのtd要素(ID属性を持っているもの)に対して、このハッシュを適用します。 その結果下記のようになります。 <table> <tr> <td>ruby</td> <td>www.ruby-lang.org</td> </tr> <tr> <td>java</td> <td>java.sun.com</td> </tr> </table> |