jadeとは?
express.jsの標準テンプレートエンジンとして採用されているのが jade 。Rails上のerbとかもそうですが、うっかりすると同じようなテンプレートをいちいち繰り返して書いていることに気づいて、悲しい気持ちになるのだけど、jadeのmixinという機能を使うことで、全てではないけど悲しい事態がある程度解消できた、という話です。
mixin
リファレンスには、
Mixins allow you to create reusable blocks of jade.と書いてあって、つまり、再利用可能なjadeブロックを作ることができる、ということ。
mixinを定義する
mixinを定義するには、
mixin name1 block mixin name2(args) blockのように、mixinキーワードを使う。定義したmixinを使うには、
+ name1 + name2('foo')のように、+mixin名という形で使う。 mixinの定義内には、jadeの構文が書けるし、jadeのブロックが渡せるので、
mixin article(title) .article h1= title blockと定義しておいて、
+article3('Title') p This is a description
とレンダリングされる。Title
This is a description
mixin適用前の悲しいテンプレート
jadeを使って作っているサイトで、mixinを知らずに書いていた残念なコードがこちら。
div.row-fluid div.span8.offset2 div.row-fluid div.span6.well h3 a(href='/labs/jscharts') JSCharts p. experiments using JSCharts. div.span6.well h3 a(href='/labs/smoothiejs') Smoothie Charts p. experiments using Smoothie Charts. div.row-fluid div.span6.well h3 a(href='/labs/chartjs') Chart.js p. experiments using Chart.jsリンク、タイトル、概要のセットで構成されたブロックが3つあるんだけど、同じ構造を3回繰り返し書いていて、DRYじゃない。
mixin適用後の美しい?テンプレート
↑のテンプレートにmininを定義してやって、DRYな形でリファクタリングしたコードがこちら。
// mixinの定義 mixin article(href, title, desc) div.span6.well h3 a(href=href)= title p= desc // mixin使用 div.row-fluid div.span8.offset2 div.row-fluid +article('/labs/jscharts', 'JSCharts', 'experiments using JSCharts.') +article('/labs/smoothiejs', 'Smoothie Charts', 'experiments using Smoothie Charts.') div.row-fluid +article('/labs/chartjs', 'Chart.js', 'experiments using Chart.js.')まったく同じコンテンツをレンダリングするjadeのコードが、よりシンプルかつエレガントになった。mixinをうまく使うことで、jadeテンプレートがDRYになることがわかる。実際にリファクタリングしたページは、こちらで公開しています。
0 件のコメント:
コメントを投稿