好的,我在我的Rails应用程序中,在页面的某个位置有_template.html.erb
呈现的下划线模板(简化版):
<script type="text/html" id="mytemplate">
<div class="foo">
<img src="{{= my_variable }}" />
</div>
</script>
然后我会在需要时在其他地方渲染它:
// change it to mustache-style because of defaults clashing with erb
_.templateSettings = {
interpolate: /\{\{\=(.+?)\}\}/g,
evaluate: /\{\{(.+?)\}\}/g
};
options = {
my_variable: '/foo/bar/baz.img'
}
compiled = _.template($("#mytemplate").html());
$(compiled(options)).appendTo("#wherever");
理论上,这应该可以正常工作,除此之外的错误开始在服务器日志和其他地方出现,浏览器404在诸如http://example.com/{{=%20my_variable%20}}
或http://example.com/foo/{{=%20my_variable%20}}
之类的网址上。 / p>
现在,我的预感是因为它与img
标签有关,并且某种程度上浏览器会尝试GET
来自页面,甚至虽然它包含在script
标签中,但我不知道为什么在地球上。这是许多人推荐的将下划线模板嵌入HTML的推荐方法之一。而且我无法将其归因于旧浏览器和/或机器人,因为服务器日志显示这些是使用最新Chrome等的真人。
编辑:经过一番调查后,1。它只发生在少数人(独特的IP)上2.所有人都在使用最新版本的Chrome。那么也许这是一个延伸不见了?
有什么想法吗?
答案 0 :(得分:0)
您必须将type="text/html"
更改为不存在的内容,例如type="x-template"
(或其他任何内容)
如果缓存已全部清除,这通常有效。
如果没有真正做到这一点,那么您可以使用外部模板(您加载的文件)。但是如果你想让它们保持内联,那么逃避问题字符(使用内部JS字符编码)。这将由JS解析相同,但不会被HTML解析器捕获。
您可以使用此工具:http://mothereff.in/js-escapes(取消选中“仅转义非ASCII和不可打印的ASCII字符”框)
这就是它的样子:
<script type="text/html" id="mytemplate">
<div class="foo">
\x3Cimg src="{{= my_variable }}" />
</div>
</script>