このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

JavaScript Templates の補足

昨日のエントリーに落ち穂拾い的に補足しておきます。

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"]うまくいった。謎も解けた。[/追記]