chunk.write和chunk.render有什么区别

时间:2013-01-27 08:48:08

标签: dust.js

我看到了这个,

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();

但是,正如您在第一个代码中看到的那样,渲染是在写入之间进行的。有人可以解释这两个函数之间的区别。

@JAiro:

阅读完答案后,我尝试了以下代码:

temaplate: 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}

请注意解释“Rendered”一词后的{~n},但不解释“Written”之后的{~n}。

但实际输出与预期输出不同。 你可以发一个jsfiddle,这将有助于我理解。 实际输出是一个空字符串,它也表示代码中可能存在错误。

1 个答案:

答案 0 :(得分: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?");

正如你所看到的“你好”和“你好吗?”,灰尘使用chunk.write,因为它知道应该打印什么。但是,在获得上下文(JSON)之前,灰尘不知道{name}的值。

因此,它使用chunk.reference,因为它将来必须解析变量名的值。 Dust将从JSON数据中获取name的值。

您可以在此处阅读有关dust.js的更多信息:

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

你可以看到工作的例子,并在这里试试你的:

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