2012-09-21 60 views
8

在我的模板,我做这样的事情把手模板和动态画面

<img class="someClass" src="{{imgURL}}"> 

的图像加载正确,但我得到这样的警告:

GET http://localhost:8888/%7B%imgURL%7D%7D 404 (Not Found) 

是有办法解决这一问题?

+0

在您的模板引擎解析模板之前,模板是否附加到页面上?如果是这样,我没有看到任何解决方法。 –

+0

我不这么认为。我正在做一个调用我的外部句柄模板的ajax调用。我缓存这些模板,后来我有一个函数,它接受json数据并找到适当的模板作为源,然后编译源代码并将json数据传递给编译后的模板。有什么关于这种方法会导致这些警告? – swallace

+0

那很奇怪。那么,当你用源创建一个图像元素时,浏览器会发出一个请求来尝试缓存它。如果模板被解析为一个字符串,然后解析成不应该发生的DOM元素。但无论如何,您可以忽略这种警告,只是通知您没有找到请求的文件(在交换源代码并再次加载之前,这是正确的),但常规最终用户在浏览时没有打开其控制台您的网站。 '=]' –

回答

10

你有两个问题:

  1. 你在你的<img>缺少右引号,但是,这不是什么大不了的事。
  2. 您的模板正在存储在隐藏的<div>或包含HTML的类似元素中。

如果你这样说:

<div id="t" style="display: none"> 
    <img class="someClass" src="{{imgURL}}"> 
</div> 

的浏览器会解释<img>作为一个真正的图像,并尝试加载在src属性所指定的资源,这就是你的404:

GET http://localhost:8888/%7B%imgURL%7D%7D 404 (Not Found) 

来自。模板很少有效且格式正确,因此您需要避免浏览器尝试将模板解释为HTML。通常的做法是在一个<script>模板存储与非HTML type

<script id="t" type="text/x-handlebars-template"> 
    <img class="someClass" src="{{imgURL}}"> 
</script> 

那么你可以说Handlebars.compile($('#t').html())让你的编译模板和浏览器不会尝试解释#t内容为HTML。

+0

谢谢你解决了我的警告。 – swallace

3

我知道已经晚了,但这里是如何做你想要的:

var view = Ember.View.create({templateName: 'myTemplate', myPicture: 'http://url_of_my_picture.png'}); 

view.appendTo('#myDiv'); 

<script type="text/x-handlebars" data-template-name="myTemplate"> 
    <img {{bindAttr src="myPicture"}}> 
</script> 
0

我发现,使用三重括号将正常工作。

<img src="{{{your source}}}" alt={{{your alt}}} /> 
+0

这个问题在5年前在2012年提出。你确定这个新答案适用于2012版handebars.js吗? – sisve