1

所以我有一個按鈕在我的登錄頁面查看,點擊時,應該路由我的用戶到註冊URL,啓動我的register功能在我的路由器,並呈現註冊視圖。唯一的問題是它似乎路由不正確。Backbone.Marionette:路由器沒有正確路由

這裏是我的着陸頁面視圖:

template = require './templates/landing' 
app = require '../application' 

module.exports = class LandingView extends Backbone.Marionette.ItemView 
    id: 'landing-view' 
    template: template 

    events: 
     'click .splash .get-started': 'route_register' 

    route_register: (e) -> 
     e.preventDefault() 
     console.log 'button clicked' 
     app.router.navigate('/register', {trigger: true}) 

,這裏是我的路由器:

application = require('application') 
HomeView = require('views/HomeView') 
LandingView = require('views/LandingView') 
RegisterView = require('views/RegisterView') 

module.exports = class Router extends Backbone.Router 

    routes: 
     '': 'landing' 
     '/home': 'home' 
     '/register': 'register' 

    landing: => 
     console.log 'in router: landing' 
     lv = new LandingView() 
     application.layout.content.show(lv) 

    home: => 
     console.log 'in router: home' 
     hv = new HomeView() 
     application.layout.content.show(hv) 

    register: => 
     console.log 'in router: register' 
     rv = new RegisterView() 
     application.layout.content.show(rv) 

在我的着陸頁面視圖,單擊該按鈕時,我得到了的console.log鉻工具。但我從來沒有從路由器獲取console.logs。這使我相信,我的路由器是不正確的實例,但在這裏就是我如何做到這一點:

class Application extends Backbone.Marionette.Application 
    initialize: => 

     @on("initialize:after", (options) => 
      Backbone.history.start(); 
      # Freeze the object 
      Object.freeze? this 
     ) 

     @addInitializer((options) => 
      # Instantiate the main layout 
      AppLayout = require 'views/AppLayout' 
      @layout = new AppLayout() 
      @layout.render() 
     ) 

     @addInitializer((options) => 
      # Instantiate the router 
      Router = require 'lib/router' 
      @router = new Router() 
     ) 

此外,在地址欄的地址chanages,例如,當我點擊着陸頁按鈕,從URL變化localhost:3000localhost:3000/register,但我沒有在路由器中獲取console.log,並且該頁面未呈現。

任何人都可以幫我找出這個bug嗎?

回答

2

一小時的調試,它是....一個愚蠢的錯字錯誤。

如果在您的routes對象前包含/對象Backbone.Router路由將無法正常工作。我刪除了正斜槓,一切正常。

不正確的路線:

routes: 
    '/': 'landing' 
    '/home': 'home' 
    '/register': 'register' 

正確路線:

routes: 
    '': 'landing' 
    'home': 'home' 
    'register': 'register'