Handlebars.js: 包括一个<script>tag in a template?</script>

创建于 2013-05-20  ·  17评论  ·  资料来源: handlebars-lang/handlebars.js

我们试图在我们的内容中包含几个要点,但显然在车把模板中添加<script src="https://gist.github.com/4332573.js"/></script>会破坏它。

有没有办法“逃避”脚本标签?

feature

最有用的评论

你不能像这样逃避脚本吗? 虽然可能不是很安全......

<script src="script1.js"><{{!}}/script>
<script src="script2.js"><{{!}}/script>

所有17条评论

您需要动态添加它们,即https://gist.github.com/jeremiahlee/1748966

嗯。 这很难看,但我想如果这是唯一的方法,我会用那个=(一定有更聪明的东西,请@wycats告诉我有更聪明的东西!谢谢@jorde :)

我是新来的,但我认为预编译模板可以解决问题!

我不确定什么对你不利,但在转义方面,我认为这一切都取决于模板的定义方式。

我会推荐动态方法,因为通过innerHTML注入的script元素在不同的浏览器中具有不同的行为,某些浏览器,尤其是旧版本的 IE,会默默地删除内容。 Zepto 试图解决这个问题: https ://github.com/madrobby/zepto/blob/master/src/zepto.js#L759 -L763 但在尝试做这样的事情时我仍然会小心行事。

@kpdecker问题很简单。 我们使用<script type="text/x-handlebars">...</script>来定义我们的模板。 在内容中添加<script src="https://gist.github.com/4332573.js"/></script>会混淆车把,因为它会假设模板的结尾是在 gist 的结尾......而不是它实际结束的地方。

如果这是唯一的选择,我会尝试编译选项,但这似乎有点过分:/

通常建议进行预编译,因为它可以提供性能优势(以需要构建步骤为代价)。 这是一个完整的技巧,但您可能可以执行以下操作:

</sc{{undefined}}ipt>

在这里解决 HTML 解析器的行为,但这感觉就像一个彻底的 hack。

在车把语言方面,我们应该看看如何通用地转义内容。

所以,我最终选择了模板编译......但这仍然不是很好,因为看起来,即使包含<script>元素,它们也没有“执行”:/
任何的想法?

如果脚本元素在最终渲染时位于 DOM 中但未执行,那么您很可能必须执行超出把手范围的手动加载。 根据我在这个主题上的经验,这是“这里是龙”(这是几年前的事了)

我虽然这可以通过这样的助手来解决:http: //codepen.io/emirotin/pen/rksCx
但由于某种原因,要点没有呈现

再次思考这个问题后,我认为这是一个比较少见的用例。 我没有为此创建额外的语言结构,而是在 FAQ 部分添加了文档,强调了在内联模板中使用注释来分解此结构的能力,并敦促用户尽可能使用预编译模板。

https://github.com/wycats/handlebars.js/blob/master/FAQ.md

你不能像这样逃避脚本吗? 虽然可能不是很安全......

<script src="script1.js"><{{!}}/script>
<script src="script2.js"><{{!}}/script>

santafebound 你是天才!

@letsrock85我可以推荐你预编译你的模板吗? 您可以完全避免此类问题并获得更好的性能。

@nknapp只是为了澄清,预编译模板不能解决这个问题。 script 标签嵌入在 DOM 中,但不会被执行。

@nevercast Handlebars 只计算包含脚本的字符串。

你对字符串做什么取决于你。 您可以将其插入 DOM,但这不会执行脚本。 那是对的。

有关解决方案,请参阅https://stackoverflow.com/questions/4619668/executing-script-inside-div-retrived-by-ajax

谢谢@nknapp ,我最终定义了自己的脚本类型。 <script type="text/x-after-hashchange">并在车把完成工作后调用它们。 我认为这与您链接的解决方案相似。

此页面是否有帮助?
0 / 5 - 0 等级