昨日のエントリーに落ち穂拾い的に補足しておきます。
template.jsの位置
僕のサンプルでは、<script src="template.js"></script>
となっていますが、template.jsはtrimpath/ディレクトリに置くことが推奨されています。
テンプレートデータの持ち方
元エントリにも追記で入れておいたことだけど: テンプレートデータ(テキスト)をHTMLページに埋め込むなら、textarea要素の内容に書くのが便利です。通常は表示されると困るので、style="display:none"
にしておきます。
コンテキストデータの持ち方
JavaScriptコード内に埋め込んでもいいですが、場合分けが多くて大量になるようなら、XMLHttp経由でJSONデータを要求/取得するといいでしょう。JSTのコンテキストはJavaScriptオブジェクトなのでJSONとの相性はいいですね。
Stringクラスのprocessメソッド
JSTはStringクラスにprocessというメソッドを追加してます。次のようなことができます。
"${greeting}, ${friend}.".process({greeting:"Hello", friend:"Taro"});
Rhinoでの使用
template.jsはRhinoでも問題なく動きます。他の対話的処理系でもたぶんOKでしょう。Stringクラスのprocessメソッドを使って、ちょっとした実験を対話的にできますから、これで開発効率はかなり向上するかと。
default修飾子の問題
{foo:null}
のコンテキスで ${foo|default:'bar'}
を処理すると、デフォルト値の'bar'が使われます。しかし、${foo|default:'b:ar'}
のようにコロンが入ると構文エラーになってしまいます。
これはバグだと思います(「仕様だ」と言い張れるだろうが不便すぎる)。回避するには、コロンを「\x3a」で表現します。${foo|default:'b\x3aar'}
-- テンプレートが文字列リテラルのときは「\\x3a」ですから注意。
JSAN化 -- うまくいかない
簡単にJSAN化(JSANでロード可能にする)できると思ってやってみたのですが、なぜかプリントダイアログが表示されてしまいます。不可解!(追記参照) が、それ以上は調べてません(気力がわかなくて)。誰かJSAN化しませんか?
[追記 date="12-05"]プリントダイアログの件は、僕がアホタレでした。Rhino向けに手を加えたJSAN.jsを読んでいて、トレース用のprint関数が動いてしまっただけ(←大バカ)。しかし、まだ問題があってどうも動きません。evalの挙動に問題があるようだけど、他にマヌケなことやっているかもしれないし。[/追記]
[追記 date="12-07"]うまくいった。謎も解けた。[/追記]