対応ブラウザ(動作確認済み)
- Windows : IE6, IE7, Firefox2.0, Opera9
- MacOS X : Firefox2.0, Opera9, iCab3.02(機能限定)
- JavaScript使用可能なこと
確認済み動作不可ブラウザ : Opera8.5
Q & A っぽいこと
- <tbody>にTemplate.GetHTML()で作成したデータを入れられない
ブラウザの仕様です。
<tbody>など、一部のエレメントはinnerHTMLはreadOnlyとなります。
Template.GetDOM()で作成したエレメントをappendChildまたはinsertBeforeで挿入して下さい。 - <iframe>をDOMエレメントで挿入出来ない
ブラウザの仕様です。
document.createElement('<iframe class="myframe">')という属性ごと作成する方法がありますが、template.jsでは対応していません。
<div><iframe class="myframe"></iframe></div>と、div要素で囲ってTemplate.GetHTML()を使用して下さい。 - Template.GetHTML()とTemplate.GetDOM()の表示結果が異なる
省略可能な終了タグを省略した場合、Template.GetDOM()はエレメントの終了と判断できず、要素を入れ子にします。
終了タグを省略しないか、Template.GetHTML()を使用してください。
テーブルの</td>を省略し、Template.GetHTML()で挿入した場合、Operaで表示が崩れることがあります。
これはtemplate.jsではなくOperaの問題と思われます。 - テンプレート中で テンプレートエンジンに使われているキーワードを使いたい
このテンプレートエンジンがキーワードにするのは {tpl: という文字列から } までです。
{ : } これらの記号だけではキーワードとして認識されませんので、そのまま使っても問題ありません。
{tpl: という文字列を表示したいは : (コロン)を : と書くか { (ブレス)を { と書くことで対応できます。
不具合 っぽいこと
現在確認済みの不具合と対処方です。
- IE、XHTMLにおいて、namespaceつきでHTML/DOMエレメントを生成するときに、namespaceが適用されない
IEでdocument.createElementNS()、element.setAttributeNS()を使用するとスクリプトエラーになるため、 namespaceの付かないdocument.createElement()、element.setAttribute()を使用しています
Template.GetDOM()を使用するとイベント属性でスクリプトエラーとなる次のバージョンにて対応します。
現バージョンではテンプレートにonclick、onmouseover、onmouseoutなど、on~で始まる属性が含まれる場合は、Template.GetHTML()を使用してください。- 生成されるHTMLでテンプレートキーワードの前後の改行が残る
通常のHTMLとしては問題ありません
<pre>や<textarea>などで影響が出るかもしれませんので今後のバージョンにて対応します。 - Template.GetDOM()を使用すると、HTMLタグではない部分で <や>があると、異常終了する
<、または>を使用してください。
今後のバージョンで対応します。 Template.GetDOM()でstyle属性のfloatが効かない次のバージョンで対応します。- 動作が遅い、複雑なHTMLを作るとiCabが異常終了する。
iCabの異常終了は原因不明です。
動的生成じゃなくても落ちることがありますし、iCabは小メモリで動いているので大量のHTMLエレメントを作るのは無理があるかもしれません。DOMエレメントを作成するよりもinnerHTMLを使用した方が早いのは、どんなベンチマークでも結果が出ています。
全般的な動作が遅いのはスピードアップは図りますが、 タグ、属性などが大量に含まれているHTMLを作る場合はTemplate.GetHTML()を使用してinnerHTMLに流し込んだ方が良いと思います。 - Template.Load()で同じテンプレートIDを1回のLoadで重複使用するとスクリプトエラーとなる
次のバージョン(0.11)で対応します。
同じIDを重複して使用すると、古いテンプレートに上書きされます。
メモリの節約になりますが、使用する予定のテンプレートには一意になるIDを使用してください。
予定(順不同)
- 実装予定メソッドの実装
- XMLデータをテンプレートへ反映
- JSONPデータの取得とテンプレートへの反映
- namespace/xslの詳細な対応
- 条件分岐構文中への変数の挿入
- テンプレートデリミタ({tpl: })の実行時の動的な変更
- 省略された終了タグの対応
- 文法エラーの含まれたHTMLファイルをテンプレートに使用したときの動作の安定化
- 以前実行したrepeatからevenoddを引き継ぐ(テーブルの追加記述などの時のevenoddの引き継ぎ)
- repeatcountのリセット