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

但是,正如您在第一个代码中看到的那样,render 出现在写入之间。有人可以解释这两个功能之间的区别。

@贾罗:

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

模板: 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?");

正如您在“你好”和“你好吗?”中看到的那样,使用灰尘chunk.write是因为它知道应该打印什么。{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 回答