<script type =“text / template”> ... </script>的说明

时间:2011-02-06 09:46:07

标签: javascript templates types backbone.js underscore.js

我偶然发现了一些我以前从未见过的东西。在Backbone.js的示例TODO应用程序(Backbone TODO Example)的源代码中,他们的模板位于<script type = "text/template"></script>内,其中包含看起来像PHP之外但带有JavaScript标记的代码。

有人可以向我解释一下吗?这是合法的吗?

6 个答案:

答案 0 :(得分:394)

这些脚本标记是实现模板功能的常用方法(如在PHP中),但在客户端。

通过将类型设置为“text / template”,它不是浏览器可以理解的脚本,因此浏览器将忽略它。这允许您在其中放置任何内容,然后可以在以后提取并由模板库使用以生成HTML片段。

Backbone不会强迫您使用任何特定的模板库 - 那里有很多:MustacheHamlEcoGoogle 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/