1

これを見た、

chunk = chunk.write("<li>").render(bodies.block, context.push(items[i])).write("</li>\n");

このコードを見る前に、私は、renderに似たものflush、そしてwrite「バッファに書き込む」に似たものだと思っていました。当然、次のようなコードになります。

for loop
chunk.write("something")
end for loop

chunck.render();

ただし、最初のコードでわかるように、書き込みの間にレンダリングが行われます。誰かがこれら2つの機能の違いを説明できますか?

@JAiro:

あなたの答えを読んだ後、私は以下のコードを試しました:

テマプレート: You have {render} {write}

データ

{
  "name": "Mick",
  "render": function(c,ct,b){
       chunk.render("Rendered {~n}");
   },
   write:function(c,ct,b){
       chunk.write("Written {~n}")
   }
}

期待される出力:

    you have Rendered 

Written {~n}

{~n}「Rendered」の後の単語は解釈されますが、「Written」の後の{〜n}は解釈されないことに注意してください。

ただし、実際の出力は期待される出力と同じではありません。jsfiddleを投稿していただけませんか。理解に役立ちます。実際の出力は空の文字列です。これは、コードにエラーがある可能性があることも示しています。

4

1 に答える 1

1

このchunk.writeメソッドは、文字列をバッファに直接書き込みます。

一方、chunk.render引数に含まれる変数を解決し、結果の文字列をバッファーに書き込みます。

コンテキストで write および render 関数をオーバーライドする必要はありません。

それがどのように機能するかをお見せしましょう。

テンプレート

Hello {name}!, how are you?

Dust はテンプレートをコンパイルして、それらを JavaScript に変換します。そのテンプレートをコンパイルすると、次のようなものが得られます。

return chk.write("Hello ").reference(ctx.get("name"), ctx, "h").write("! how are you?");

"Hello" と "how are you?"chunk.writeでわかるように、何を出力するべきかを知っているため、dust が使用します。{name}ただし、dust はコンテキスト (JSON) を取得するまでの値を知りません。

そのため、chunk.reference将来変数名の値を解決する必要があるため、 を使用します。Dust は JSON データから name の値を取得しようとしています。

Dust.js の詳細については、こちらをご覧ください。

http://linkedin.github.com/dustjs/wiki

そして、あなたはここで実際の例を見て、あなたのものを試すことができます:

http://linkedin.github.com/dustjs/test/test.html

于 2013-01-28T13:56:11.687 に答える