我们试图在我们的内容中包含几个要点,但显然在车把模板中添加<script src="https://gist.github.com/4332573.js"/></script>
会破坏它。
有没有办法“逃避”脚本标签?
您需要动态添加它们,即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 部分添加了文档,强调了在内联模板中使用注释来分解此结构的能力,并敦促用户尽可能使用预编译模板。
你不能像这样逃避脚本吗? 虽然可能不是很安全......
<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">
并在车把完成工作后调用它们。 我认为这与您链接的解决方案相似。
最有用的评论
你不能像这样逃避脚本吗? 虽然可能不是很安全......
<script src="script1.js"><{{!}}/script>
<script src="script2.js"><{{!}}/script>