JS中的输出缓冲区?

4
问题:JavaScript是否有与PHP的输出缓冲相当的功能,如(start,get_clean)<<< EOF ... EOF语法将内联HTML包装在变量中?在现代浏览器中可以使用的封装器、库、函数等。
为什么:我想尝试使用纯JS制作MVC框架,但是通过字符串创建HTML块或读取文件并对关键字进行查找/替换的想法让我怀疑代码的效率和可维护性如何。

1
我认为你想要模板。JavaScript 操作的是 DOM,而不是 HTML 源代码。HTML 源代码的目的是被浏览器解析。 - Šime Vidas
没有JS的'heredocs'。除非浏览器中的JS解释器为了渲染效率而缓存/延迟dom修改,否则也没有输出缓冲。 - Marc B
3个回答

3

回答你的问题,JavaScript没有类似于heredoc语法的东西。(CoffeeScript有,但是很丑陋。)

你应该看看模板引擎是如何实现的。我喜欢doT,它非常高效。你可以在script块中定义模板,从那里加载模板源码,引擎将其编译成一个函数。(eval的少数合法用途之一。)

<script type="text/x-dot-template" id="mytmpl">
Hello, <b>{{=it.name}}</b>
</script>

 

var tmpl = doT.template($('#mytmpl').html());
tmpl({name:'test'}); // => 'Hello, <b>test</b>'

这样可以将标记保持在 HTML 中,避免其出现在 JavaScript 中。

1

不,JavaScript目前还没有这个功能。下一个ECMAScript版本中有这个提案,但是谁知道浏览器何时会真正支持它。

现在常见的替代方法是在代码中添加一个<script type="text/html">块(有时类型为text/template,这似乎是任意的),然后使用JavaScript加载该块。许多模板工具现在都采用这种方法。由于它只是一个HTML标签,您可以在其中放置任何内容,无需像疯子一样连接字符串。


谢谢!当它允许我的时候,我会标记为已回答。在EC5中它叫什么?我想检查一下FF的夜间构建是否支持它,因为我只是出于兴趣而这样做,浏览器支持并不重要。 - Jonathan

1

我不知道你所说的“输出缓冲”是什么意思。在JavaScript中,每个操作都会立即执行,尽管一些布局渲染可能会被浏览器延迟。

JavaScript中没有EOF语法,但你可以用反斜杠来转义换行符:

"a\
b" === "ab"; // true

这可能有助于提高可读性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接