我只是偶然发现了一些我以前从未见过的东西。在 Backbone.js 的示例 TODO 应用程序(Backbone TODO 示例)的源代码中,他们的模板<script type = "text/template"></script>
包含在一个.
谁可以给我解释一下这个?这是合法的吗?
我只是偶然发现了一些我以前从未见过的东西。在 Backbone.js 的示例 TODO 应用程序(Backbone TODO 示例)的源代码中,他们的模板<script type = "text/template"></script>
包含在一个.
谁可以给我解释一下这个?这是合法的吗?
这些脚本标签是在客户端实现模板功能(如在 PHP 中)的常用方法。
通过将类型设置为“文本/模板”,它不是浏览器可以理解的脚本,因此浏览器将简单地忽略它。这允许您将任何内容放入其中,然后可以稍后提取并由模板库使用以生成 HTML 片段。
Backbone 不会强迫您使用任何特定的模板库 - 有很多模板库:Mustache、Haml、Eco、Google Closure 模板等等(您链接到的示例中使用的是underscore.js)。这些将使用它们自己的语法供您在这些脚本标记中编写。
这是合法的,非常方便!
试试这个:
<script id="hello" type="text/template">
Hello world
</script>
<script>
alert($('#hello').html());
</script>
几个 Javascript 模板库使用这种技术。Handlebars.js就是一个很好的例子。
通过设置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/很好地解释了这一点
要添加到 Box9 的答案中:
Backbone.js 依赖于 underscore.js,它本身实现了 John Resig 的原始微模板。
如果您决定将 Backbone.js 与 Rails 一起使用,请务必查看 Jammit gem。它提供了一种非常干净的方式来管理模板的资产打包。 http://documentcloud.github.com/jammit/#jst
默认情况下,Jammit 还使用 JResig 的微模板,但它也允许您替换模板引擎。
这是一种将文本添加到 HTML 的方法,无需渲染或规范化。
这与添加它没有什么不同:
<textarea style="display:none"><span>{{name}}</span></textarea>