外部テンプレートをロードするには、次の 2 つのオプションがあります。
- テンプレートの事前コンパイル (Hogan.js IMHO の最高の機能) または
- require.jsのテキスト プラグインを使用してテンプレート文字列をロードする
残念ながら、Hogan.js テンプレートをプリコンパイルするためのドキュメントは存在しません。Github リポジトリのコピーがある場合は、ディレクトリ内にジョブを実行bin
するスクリプトが呼び出されます。nodejsといくつかのnpmモジュール (つまりおよび) がインストールされているhulk
必要があります。nopt
mkdirp
これらのモジュールをインストールしたらnodejs
、テンプレート ファイル Test.hogan を指定します。
<p>Your text here: {{text}}</p>
次のコマンドを使用して、スクリプトをプリコンパイルできます。
hulk Test.hogan
次のテキストが生成されます。
if (!!!templates) var templates = {};
templates["Test"] = new Hogan.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<p>Your text here: ");t.b(t.v(t.f("text",c,p,0)));t.b("</p>");return t.fl(); },partials: {}, subs: { }});
これを という名前のファイルに保存します。templates.js
HTML ページでそのファイルをロードすると、コンパイルされたテンプレート関数がキー "Test" にtemplates.js
あるグローバル オブジェクトが作成されます。templates
これはコンパイラであるため、hogan.js
ファイルを省略して (テンプレートがプリコンパイルされているため) template.js
、ディストリビューションに含まれるファイルのみを含めることもできます。
<!DOCTYPE html>
<html>
<head>
<title>Hogan.JS Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="js/template.js"></script>
<script src="js/templates.js"></script>
</head>
<body>
<script>
var data = {
text: 'Hello World'
};
var compiledTemplate = templates['Test'];
var renderedTemplate = compiledTemplate.render(data);
var box = document.createElement('div');
box.innerHTML = renderedTemplate;
document.body.insertBefore(box,document.body.childNodes[0]);
</script>
</body>
</html>
注:master
Github リポジトリの現在のブランチを使用すると、2.0.0 テンプレート バージョンで使用されているものとは異なるコンストラクターを使用するテンプレートが生成されたため、いくつかの問題が発生しました。使用する場合はhulk
、必ずフォルダtemplate.js
にあるファイルを使用してlib
ください。
または、require.js とテキスト プラグインを使用することもできます。それらをダウンロードして、js
フォルダーに保存します。require
次に、テンプレート テキストをロードするステートメントを追加する必要があります。
<!DOCTYPE html>
<html>
<head>
<script src="js/hogan-2.0.0.js"></script>
<script src="js/require.js"></script>
</head>
<body>
<script>
var data = {
text: 'Hello World'
};
require(['js/text!Test.hogan'], function(testHoganText) {
// testHoganText contains the text of your template
var compiled = Hogan.compile(testHoganText);
var renderedTemplate = compiled.render(data);
var box = document.createElement('div');
box.innerHTML = renderedTemplate;
document.body.insertBefore(box,document.body.childNodes[0]);
});
</script>
</body>
</html>