单击渲染骨干视图(通过路由器推送状态)

我有一个3页的应用程序,我试图点击。 第一页是登录页面。 其他两个应该在单击链接时呈现。 它们都包含在同一个容器div#modal-content中

我的HTML如下:

   

我的路由器function如下:

 var Approuter = Backbone.Router.extend({ initialize: function() { console.log('router initialized'); Backbone.history.start({ pushState: true }); }, routes: { '': 'main', 'signup-page' : 'signup', 'login-page' : 'login' }, main: function() { this.landing = new LandingView({ el: $('#modal-content') }); slider.slidePage(this.landing.$el); }, signup: function() { this.signuppage = new SignUpView({ el: $('#modal-content') }); console.log("LANDING VIEW: Signup clicked"); }, login: function() { this.loginpage = new LoginView({ el: $('#modal-content') }); console.log("LANDING VIEW: Login clicked"); } }); 

视图文件如下:

 var SignUpView = Backbone.View.extend({ initialize: function() { this.render(); }, render: function() { var template = Handlebars.compile($('#signUpPage').html()); this.$el.html(template); }, }); 

 var LoginView = Backbone.View.extend({ initialize: function() { this.render(); }, render: function() { var template = Handlebars.compile($('#loginPage').html()); this.$el.html(template); }, }); 

另外,这是我的模板:

  

我的问题单击#regup-page或#login-page链接后,我可以看到url更改为“localhost /#signup-page”,但视图未呈现。

但是当我在localhost / #regup-page或localhost /#login-page刷新页面时,我看到了视图的呈现。

我哪里错了?

请看一下上面的代码:

    

Edit1:Routes和pushState之间的差异

Backbone Routes使您能够监视hasChange历史事件(url中的更改)并在url( http://localhost/backbone-test/#someRoute )发现一些更改时触发一些js代码,这太棒了,因为我们可以触发一些复杂的操作用户在您的网站上,只需要调用url。

pushState使您能够隐藏这个’#’哈希并使您的URL更具可读性,但正如骨干文档所述

“如果您的路径为/ documents / 100,那么如果浏览器直接访问该url,您的网络服务器必须能够提供该网页。”

然后,如果你使用pushState:true你的url变得更易读, http://localhost/backbone-test/#someRoutehttp://localhost/backbone-test/someRoute但是你需要创建一个后端来直接回答访问你可读的url。

当pushState为true并且您调用href="#someRoute" ,浏览器href="#someRoute"其理解为html锚点。