我偶然发现了一些我以前从未见过的东西。在Backbone.js的示例TODO应用程序(Backbone TODO Example)的源代码中,他们的模板位于<script type = "text/template"></script>
内,其中包含看起来像PHP之外但带有JavaScript标记的代码。
有人可以向我解释一下吗?这是合法的吗?
答案 0 :(得分:394)
这些脚本标记是实现模板功能的常用方法(如在PHP中),但在客户端。
通过将类型设置为“text / template”,它不是浏览器可以理解的脚本,因此浏览器将忽略它。这允许您在其中放置任何内容,然后可以在以后提取并由模板库使用以生成HTML片段。
Backbone不会强迫您使用任何特定的模板库 - 那里有很多:Mustache,Haml,Eco,Google Closure template等等on(您链接到的示例中使用的是underscore.js)。这些将使用他们自己的语法在这些脚本标记内写入。
答案 1 :(得分:110)
这是合法的,非常方便!
试试这个:
<script id="hello" type="text/template">
Hello world
</script>
<script>
alert($('#hello').html());
</script>
有几个Javascript模板库使用这种技术。 Handlebars.js就是一个很好的例子。
答案 2 :(得分:25)
通过设置type
以外的脚本标记text/javascript
,浏览器不会执行脚本标记的内部代码。这称为微模板。这个概念广泛用于单页面应用程序(又称SPA)。
<script type="text/template">I am a Micro template.
I am going to make your web page faster.</script>
对于微模板,脚本标记的类型为text/template
。 Jquery创建者John Resig http://ejohn.org/blog/javascript-micro-templating/
答案 3 :(得分:13)
添加到Box9的答案:
Backbone.js依赖于underscore.js,它本身实现了John Resig的原始微模板。
如果您决定将Backbone.js与Rails一起使用,请务必查看Jammit gem。它提供了一种非常干净的方式来管理模板的资产包装。 http://documentcloud.github.com/jammit/#jst
默认情况下,Jammit也使用JResig的微模板,但它也允许您替换模板引擎。
答案 4 :(得分:10)
<script type = “text/template”> … </script>
已过时。请改用<template>
标记。
答案 5 :(得分:3)
jQuery Templates是一个使用此方法存储HTML的示例,该HTML不会直接在其他HTML中呈现(这是重点): http://api.jquery.com/jQuery.template/