将silent true传递给Backbone.History时绑定Backbone事件

时间:2013-04-04 18:52:18

标签: javascript backbone.js handlebars.js

我的Backbone应用程序的第一个状态是从服务器呈现的。我不需要在页面加载时触发路由器,因为我正在引导我的模型:

我初始化应用程序:

    window.App = {
        init:function(root){
            this.root = root;
            this.router = new AppRouter();
            Backbone.history.start({pushState:true, silent:true});
        }
    }

路线[S]:

var AppRouter = Backbone.Router.extend({
        routes : {
            "" : "index",
            "profile/:id" : "profile",
        },
        profile: function(id){
            var user = new App.Models.User({id: id});
            var view = (new App.Views.Profile({model:user})).render().el

            App.root.empty().append(view)
        }

查看:

    App.Views.Profile = Backbone.View.extend({
        events:{
            "click #toggle" : "toggleTab"
        },
        initialize:function(opts){
            this.model.on('sync', this.render, this);
            this.model.fetch();
        },
        template: Handlebars.templates['profile.hbs'],
        render: function(){
            this.$el.html(this.template());
            return this;
        },
        toggleTab:function(){...}

我正在将silent: true传递给Backbone.history,因此初始路由不会被触发,因此click事件不会被绑定。对于不触发路由器的事件,会发生这种情况。 我真的不想在页面加载时触发路由器并重新渲染/获取。在这种情况下,navigate不是一种选择。

如何在这种情况下绑定这些事件?


更新/澄清

出于搜索引擎优化的原因,服务器呈现html意味着我已经拥有了html和数据(我真的不需要empty(),重新渲染,触发或获取任何内容。 我在服务器和客户端都使用handlebars。 我知道这里的问题是“初始页面”不是“Backbone.View”,所以它不会得到事件绑定。 我可以通过生成视图轻松触发路由器和/或替换内容,但由于我已经拥有了所有内容,我试图不这样做。 我应该只引导模型并重新渲染html吗? 是否有最佳实践

0 个答案:

没有答案