2016-09-08 9 views
0

ハンドルバーを使用してパーシャルからテンプレートをコンパイルする作業をしています。コンパイルされたハンドルバーテンプレートを印刷します(データは入力しません)

var handlebars = require('handlebars'), 
    fs = require('fs'); 

var data = { 
    title: "Print handlebars tempalte", 
    author: "Internet", 
    body: "Hi, I am the body" 
} 

fs.readFile('partial.html', 'utf-8', function(error, source) { 
    handlebars.registerPartial('example_partial', source); 
}); 

fs.readFile('ignore-keywords.html', 'utf-8', function(error, source) { 
    var template = handlebars.compile(source); 
    var html = template(data); 
    console.log(html) 
}); 

<div> 
    <p> 
    Hi, I am a partial! 
    </p> 
</div> 

に従い、テンプレートを使用すると、スクリプトの中で見ることができるように、私は印刷することができ

<div class="header"> 
    <h1>{{title}}</h1> 
</div> 
<div class="body"> 
    <p>{{body}}</p> 
</div> 
<div class="footer"> 
    <div> 
     <p> 
     Written by {{author}} 
     </p> 
    </div> 
    {{> example_partial}} 
</div> 

あるとして、部分的には次のとおりです。現在、私は、次のJavaScriptを持っています最終的には、console.logを使用してHTMLを生成しました。データを充填することなく、しかし、私は、最終的なテンプレートを印刷できるようにしたい、このような何か:私はその後、他の情報源に送信することができるはずコンパイル済みのテンプレートを印刷できるようにしたい

<div class="header"> 
    <h1>{{title}}</h1> 
</div> 
<div class="body"> 
    <p>{{body}}</p> 
</div> 
<div class="footer"> 
    <div> 
     <p> 
     Written by {{author}} 
     </p> 
    </div> 
    <div> 
     <p> 
     Hi, I am a partial! 
     </p> 
    </div> 
</div> 

をどのこのコンパイルされたテンプレートを使用し、データを入力して、それぞれのHTMLを生成します。この目的のために、私は上記のテンプレートを生成する必要があります。これを達成するにはどうすればいいですか?

答えて

0

コンパイルされたテンプレートは機能なので、印刷または共有することはできません。

handlebars.compileを呼び出すと、テンプレートが文字列と置換トークンに分割され、実行時に文字列を入力データの適切なトークンと連結する関数が作成されます。ループ({{#each}})も実際のJSループになります。

残念ながら、単純なJSON文字列アルゴリズムも、より頑強なstructured cloning algorithmも関数オブジェクトをシリアル化できません。私は可能なことは認識していませんが、一部のブラウザでは、ソースを印刷する関数の.toStringをサポートしています。

あなたはそれを回避することができるかもしれないと思います。 'ignore-keywords.html'テンプレートの{{トークンを置き換えて、ハンドルバーでは評価されないようにしますが、{{>トークンは除外します。部分テンプレートで同じことを行い、親テンプレートを呼び出します。それは、変数のいずれかを置き換えずに部分を評価して含めるべきです。エスケープされたトークンを{{に入れ替えてください。通常はコンパイルできるが、部分的にインラインになっているテンプレートがあります。

0

HandlebarsはJSなので、静的な場所(既知のWebアドレス)からテンプレートを取得してから、そのテンプレートを生成するために、グローバルにアクセス可能な関数を持つ各プロジェクト/ site/appにJSファイルを追加する必要があります。関数の引数。どちらか、またはNode.jsのようなものを使って、ajaxリクエストのパラメータに基づいてこれらのテンプレートのサーバー側をビルドして返します。個人的には、あなたが望むどんなアプリケーションにもJSファイルを埋め込むだけで済むので、私は前者に固執します。

関連する問題