0

我遇到了很大的问题,Handlebars.JS因为它没有用{{anything}}相应的变量代替。

我有以下辅助功能:

function compileTemplate(name){
return Handlebars.compile($('#'+name+'-template').html());
}

我在以下主干视图中使用它:

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 而不是我的应用程序中工作?

4

1 回答 1

1

Handlebars and Backbone 看起来不错,并且小提琴运行,所以问题出在您的测试环境上。当我查看您服务器上的页面源时,我看到:

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

注意明显没有大括号。我猜服务器端的东西正在吃你的牙套。您说您正在使用 Django,因此 Django 的模板可能会导致您的问题。

于 2013-06-18T16:27:56.183 回答