19

これはクライアント側のテンプレートへの私の最初の進出であり、それを理解し、正しく使用していることを確認したいと思います。この LinkedIn エンジニアリング ブログを読んだ後、口ひげハンドルバーではなく、dust.jsを使用することにしました。このスタックオーバーフローの投稿は私の質問の多くに答えていることに注意してください。ただし、明確にしたいことがいくつかあります。

私が働いている環境では、サーバー側には何にもアクセスできないため、作成したものはすべてクライアントのブラウザーで完全に実行できる必要があります。この例では、 LinkedIn Dust チュートリアルからこのコード サンプルを再作成してみます。

テンプレートをオンザフライでコンパイルするので、 dust-core.jsではなく、dust-full.jsをインクルードします。

<script src="js/dust-full.js"></script>

HTMLは次のとおりです。

<script id="entry-template">
{title}

<ul>
    {#names}
    <li>{name}</li>{~n}
    {/names}
</ul>
</script>

<div id="output"></div>

そして JavaScript (jQuery を使用):

$(document).ready(function () {
    var data = {
        "title": "Famous People", 
        "names" : [{ "name": "Larry" },{ "name": "Curly" },{ "name": "Moe" }]
    }

    var source   = $("#entry-template").html();
    var compiled = dust.compile(source, "intro");
    dust.loadSource(compiled);

    dust.render("intro", data, function(err, out) {
        $("#output").html(out);
    });
});

このjsfiddleでわかるように、これはうまくいくようです。

いくつかの質問:

  1. テンプレートを script タグ内に含める必要があるのはなぜですか? この変更された fiddleのように、id="entry-template" を使用して div に含めて、dust.render() 中にその内部の html を置き換えないのはなぜですか?

  2. " Dust.loadSource(compiled); " は何をしますか? ドキュメントには、「ロードするJSのスクリプトブロックの一部として「コンパイル済み」文字列を含めると、「イントロ」テンプレートが定義および登録されます。すぐに実行したい場合は、それを呼び出してください。しかし、私はそれが何を意味するのか理解していません。ただし、その行を削除すると機能しないことに気付いたので、理解したいと思います。

  3. テンプレートに満足して完成させた後、ページが読み込まれるたびにブラウザでコンパイルするのではなく、軽量のdust-core.jsをインポートするようにコンパイルするにはどうすればよいですか? これを行うことには大きな利点がありますか、それとも Dust-full.js のままにしておくべきですか?

  4. より一般的には、これはダスト(またはその問題のテンプレートフレームワーク)を実装するための適切で便利な方法のように見えますか、それとも私はどこかから離れていますか?

前もって感謝します。

4

2 に答える 2

1
  1. スクリプト タグにテンプレートを含める必要はありません。2 番目の方法の方が優れています。

  2. loadSource は、テンプレートのコンパイル済み出力を実行します。これには、他のテンプレートと Dust.render がコンパイル済み出力チェーンをその名前 (この場合は「intro」) で参照できるように登録することが含まれます。

  3. これには、ブラウザを開く前にテンプレートを事前にコンパイルすることが含まれます。そのため、すべてのテンプレートを .tl ファイルとして含むフォルダーがある場合があります。一部のビルド ステップでは、これらすべてのテンプレートを (dust.compile を使用して) コンパイルし、出力を .js ファイルとして保存します。次に、ブラウザーは実際にそれらの .js ファイルをロードします。これにより、dust.loadSource も不要になります。ここでの利点は、最大 3000 行のコードを追加するコンパイラとパーサーを含める必要がないことです。ダスト ライブラリのサイズは、4000 行のコードからわずか 800 行のコードにまで増加します。編集:また、おっしゃったように、ブラウザでオンザフライでテンプレートをコンパイルしていないため、パフォーマンスも大幅に向上します。

  4. 上記のビルドステップを見逃していることを除けば、あなたは正しい道を進んでいると言えます。

于 2014-01-27T08:31:09.417 に答える