我看到了这个,
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,这将有助于我理解。 实际输出是一个空字符串,它也表示代码中可能存在错误。
答案 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
你可以看到工作的例子,并在这里试试你的: