Handlebars.JS不会用上下文替换标签

时间:2013-06-18 03:08:39

标签: django backbone.js handlebars.js

我遇到了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,它运行良好:

http://jsfiddle.net/vcrhh/1/

实际的应用是54.235.201.41(抱歉,不允许我将其添加为链接)。

还尝试将代码保存为本地文件并运行它,也可以正常工作。

用户名:mkremer90@gmail.com和密码测试。看到实际应用有什么问题?为什么它在JSFiddle / local中工作而不在我的应用程序中?

1 个答案:

答案 0 :(得分:1)

Handlebars和Backbone看起来很好,小提琴运行所以问题在于您的测试环境。当我查看服务器上的页面源代码时,我看到了:

<script id="team-li-template" type="text/x-handlebars-template">
    <li team-id=""><a></a></li>
</script>

请注意大括号的明显缺失。我猜服务器端正在吃你的大括号。你说你正在使用Django,所以Django的模板可能会导致你的问题。