2012-11-17 80 views
2

我有一个非常简单的Web应用程序

第2个文件是一个标准的index.html,它看起来有点像下面

<body> 
<div id="add-stuff"></div> 
<script id="the-template" type="text/x-handlebars-template" src="some-template.erb.html"></script> 
<script type="text/javascript"> 
    var data = []; 
    var source = $("#the-template").html(); 
    var template = Handlebars.compile(source); 
    $('#add-stuff').html(template(data)); 
</script> 
</body> 

第二个是我的车把模板“一些-template.erb.html”,它看起来像下面

<table> 
{{#each item}} 
<tr><td>{{ item.name }}</td></tr> 
{{/each} 
</table> 

使用javascript我上面内嵌的问题是,当我尝试ŧ他“.html()”部分它总是返回一个空字符串(因为我链接到erb.html文件中)。

我发现了一个解决方案,如果我使用$ .ajax来拉入模板,但我更喜欢上面的东西(所以我可以包含模板客户端w/out任何东西嵌套的jQuery回调)。

这可能吗?如果不是我能做些什么来改进基于$ .ajax的方法?

**的基于AJAX的做法,工作如下所示**

<body> 
<div id="add-stuff"></div> 
<script type="text/javascript"> 
$.ajax({ 
    url: 'some-template.erb.html', 
    cache: true, 
    success: function (source) { 
    var data = []; 
    var template = Handlebars.compile(source); 
    $('#add-stuff').html(template(data)); 
    } 
}); 
</script> 
</body> 

Here是对计算器的问题是,在稍微详细地显示了$阿贾克斯版本

+0

的文件名是开放的辩论。我正在做Django的开发,并希望有一个简单的方法来编译句柄模板,而不需要进行ajax调用 –

回答

1

也许其链接已经过时了,但我今天发现了你的问题,并且我为你或者处理同样问题的人提供了一个建议。这不是一个完美的选择,但如果你不想使用ajax,那么对于小模板来说就是一个选项。

你认为如何将模板作为字符串写入外部JS文件的变量中,并通过脚本标签包含它?

template.js

var source = '<table>\ 
      {{#each item}}\ 
      <tr><td>{{ item.name }}</td></tr>\ 
      {{/each}'; 

的index.html

<body> 
<div id="add-stuff"></div> 
<script src="template.js"></script> 
<script type="text/javascript"> 
    var data = []; 
    var template = Handlebars.compile(source); 
    $('#add-stuff').html(template(data)); 
</script> 
</body>