我遇到了Handlebars.JS
的问题,因为它没有用相应的变量替换{{anything}}
。
我有以下辅助函数:
function compileTemplate(name){
return Handlebars.compile($('#'+name+'-template').html());
}
我在以下Backbone视图中使用的是:
Soccer.Teams.Li = compileTemplate('team-li');
Soccer.Router = Backbone.Router.extend({
routes: {
"": "index"
},
index: function(){
Soccer.container.html(compileTemplate('main'));
var teams = new Soccer.Teams.View();
var container = Soccer.container.find('.sub-content');
container.html(teams.render().$el.html());
var teamsList = container.find('#teams-list');
teams.teams.forEach(function(team){
teamsList.append(Soccer.Teams.Li(team.toJSON()));
}, this);
Soccer.page.trigger('pagecreate');
}
});
#team-li-template
如下:
<script id="team-li-template" type="text/x-handlebars-template">
<li team-id="{{id}}"><a>{{name}}</a></li>
</script>
肯定会传递正确的信息,如果我console.log
.toJSON
确实包含了正确的信息,但没有替换,标签就变成了什么。
有什么想法吗?
谢谢!
更新
奇怪的是,我将所有代码复制到了一个JSFiddle,它运行良好:
实际的应用是54.235.201.41(抱歉,不允许我将其添加为链接)。
还尝试将代码保存为本地文件并运行它,也可以正常工作。
用户名:mkremer90@gmail.com和密码测试。看到实际应用有什么问题?为什么它在JSFiddle / local中工作而不在我的应用程序中?
答案 0 :(得分:1)
Handlebars和Backbone看起来很好,小提琴运行所以问题在于您的测试环境。当我查看服务器上的页面源代码时,我看到了:
<script id="team-li-template" type="text/x-handlebars-template">
<li team-id=""><a></a></li>
</script>
请注意大括号的明显缺失。我猜服务器端正在吃你的大括号。你说你正在使用Django,所以Django的模板可能会导致你的问题。