Jemplate、とりあえず使ってみた。
俺がMasonを使うのは俺がプログラマーだからなんだなぁ、というのがまず最初の感想。なんでかというと、Jemplateがでてきた時、まず真っ先にTTへの反動があり、Mason使いたい!と思って、実装をMasonに変えてみれないかと考えてたからである。
ところがところが。Masonはとてもよくできたコードなのだけどロジックとプレゼンテーションの分離というとちょっと目指すものが違っており、TTのようにスムーズなパーサーがないし、Perlコードが結構そのまま入るのでそれをJavascriptに変換するというのも無理があった。
俺はどうも
sub action {
my %data = ...;
$template->process(%data);
}
みたいなパターンが嫌いで、どうせならロジックはページそのものに埋め込みたい。Masonで言う所の<init>ブロックがとても気に入ってるのはそのせい。どうもひとつの動作を具現化するのに二つのファイルをいじるという事に納得できないのだなぁ。
まぁなにはともあれ。
そういう事を踏まえて、そうか、これは表示側を作成する人のためのツールなんだ、と理解できた瞬間にJemplateはすっと納得できた。これはこれでいいんじゃなかろうか。TTを使えるコーダーの人に渡したら便利そうだよなぁ。
ちなみに試したみたのはこれだけなんだけどね。妙にこのエレガントさに納得してしまった:
test.tt:
my name is [% poop %]jemplate -c test.tt
(snip)Jemplate.templateMap['test.tt'] = function(context) {
if (! context) throw('Jemplate function called without context\n');
var stash = context.stash;
var output = '';try {
output += 'my name is ';
//line 1 "test.tt"
output += stash.get('a');
}
catch(e) {
var error = context.set_error(e, output);
throw(error);
}return output;
}