Javascript 解释<;脚本类型=";“文本/模板”></脚本>;

Javascript 解释<;脚本类型=";“文本/模板”></脚本>;,javascript,templates,types,backbone.js,underscore.js,Javascript,Templates,Types,Backbone.js,Underscore.js,我只是偶然发现了一些我从未见过的东西。在Backbone.js的示例TODO应用程序()的源代码中,他们的模板位于一个中,其中包含的代码看起来像来自PHP,但带有JavaScript标记 有人能给我解释一下吗?这合法吗?这些脚本标记是实现模板功能(如PHP)的常用方法,但在客户端 通过将类型设置为“text/template”,它不是浏览器可以理解的脚本,因此浏览器将忽略它。这允许您将任何内容放入其中,稍后可以提取这些内容并由模板库用于生成HTML片段 主干不会强制您使用任何特定的模板库—有很多

我只是偶然发现了一些我从未见过的东西。在Backbone.js的示例TODO应用程序()的源代码中,他们的模板位于一个
中,其中包含的代码看起来像来自PHP,但带有JavaScript标记


有人能给我解释一下吗?这合法吗?

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

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


主干不会强制您使用任何特定的模板库—有很多模板库:、、等等(您链接到的示例中使用的是)。这些脚本将使用它们自己的语法在这些脚本标记中进行编写。

要添加到第9栏的答案中:

Backbone.js依赖于下划线.js,下划线.js本身实现了John Resig的原始微模板

如果您决定在Rails中使用Backbone.js,请务必查看Jammit gem。它提供了一种非常干净的方法来管理模板的资产打包。


默认情况下,Jammit还使用JResig的微模板,但它也允许您替换模板引擎。

jQuery模板就是一个使用此方法存储不会直接在其他HTML中呈现的HTML(这就是全部要点)的示例:

这是一种向HTML中添加文本的方法,而无需呈现或规范化文本

这与添加它没有什么不同,就像:

 <textarea style="display:none"><span>{{name}}</span></textarea>
{{name}

它合法而且非常方便

试试这个:

<script id="hello" type="text/template">
  Hello world
</script>
<script>
  alert($('#hello').html());
</script>

你好,世界
警报($('#hello').html());

一些Javascript模板库使用这种技术。是一个很好的例子。

通过设置脚本标记
类型
而不是
文本/javascript
,浏览器将不会执行脚本标记的内部代码。这就是所谓的微模板。这一概念广泛应用于单页应用程序(也称为SPA)

我是一个微模板。
我将使你的网页更快。


对于微模板,脚本标记的类型是
text/template
。Jquery创建者John Resig对此做了很好的解释。

已经过时了。改用
标记

@Matt,就是这样。同时,使用
.innerHTML
很容易再次检索全文,因此现在在模板引擎中这是一种常见的做法。这难道不是一个好消息吗!我一直在寻找这样的解决方案。。感谢您的回复和跟进!嗨,我是马特。会通过html验证测试吗?期待
标签来自未来的你好<代码>在这里,但网站仍在使用这种技术,如reddit.com:回答问题。我刚刚在新的YUI应用程序框架代码中遇到了这个技巧:我看到的
type=“text/tcl”
怎么样?如何使用它?(我应该问另一个问题吗?@L01man是的,你应该问另一个问题。mjhm的YUI链接现在位于:不同的是,textarea仍然会将这些元素插入DOM并获取所请求的任何外部资产(如图像)。脚本标记将不会出现。@LocalPCGuy如果不正确,包括文本区域内的
,则不会导致浏览器获取
图像。jpg
,浏览器知道文本区域内的内容不是要呈现的。@vikki woops,你是对的,textarea可能是为数不多的几个可以替代脚本标记模板的元素之一。@LocalPCGuy是的,我认为这两个元素可以互换使用。如果模板中有行
,则不能在脚本标记中使用它,因此可以使用文本区域,反之亦然。是的。。。在template标记和script type=text/template之前,我相信我们都是用textarea完成的。当我们没有ajax时,iframes也是如此。jQuery.template被放弃,接下来是如何在使用jQuery的原始javascript中执行此警报?@tremor你是说在没有jQuery的原始javascript中?类似于:var el=document.getElementById('hello');var html=el.textContent;警报(html);(你需要进一步研究在IE中处理脚本标签的文本)@SgtPooki-ya我的意思是没有,谢谢你的回答。我真正想做的是将该脚本src到一个外部文件并获取它,但我发现这实际上是不可能的。。所以我现在要深入研究AJAX和socket.io。@tremor,我可能不太明白您想要做什么,但是动态地获取外部文件,以作为模板运行或解析,这是完全可能的。请查看requirejs。@tremor如果您想动态提取外部文件,我宁愿使用XHR而不是脚本标记。XHR还可以处理简单的HTML响应。。。从IE 11开始,
标记仍然不受Internet Explorer支持。5年后使用该标记。可以保存任何内容,但它们不会被解析。另一方面,标记被解析为DOM,因此需要使用有效的HTML。通常,这意味着第一个将作为完整的模板保留,而第二个将剥离不符合html的部分并破坏模板。。。当然,如果你使用诸如Mustach之类的模板引擎,这只是一个问题。不要使用标签,也不要基于其他“过时”的东西做出决定。这不是米兰时装周,如果某种东西在技术上可行,它可以被使用:)现在是真的:标签在IE和Opera Mini中仍然是不受支持的(根据CanIUse的说法),标签会准确地保存你给它的东西,与隐藏的div或任何其他可能会丢失空白或注释的标记不同。自从答案发布两年以来,IE11本身就是一项过时的技术,而微软已经转向Edge,wh
<script type="text/template">I am a Micro template. 
  I am going to make your web page faster.</script>