Backbone.Marionette: Маршрутизатор неправильно маршрутизирует
Таким образом, у меня есть кнопка в представлении моей целевой страницы, которая при нажатии должна направить пользователя к URL-адресу регистрации, инициировать мой register
функция в моем маршрутизаторе, и визуализировать представление реестра. Единственная проблема заключается в том, что он, кажется, неправильно маршрутизирует.
Вот мой вид целевой страницы:
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 в инструментах Chrome. Но я никогда не получаю 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()
)
Кроме того, адрес изменяется в строке URL, например, когда я нажимаю кнопку целевой страницы, URL изменяется с localhost:3000
в localhost:3000/register
, но я не получаю console.log в роутере, и страница не отображается.
Может ли кто-нибудь помочь мне определить эту ошибку?
1 ответ
Час отладки и это.... глупая ошибка опечатки.
Если вы включите /
перед вашим routes
объект в Backbone.Router
маршрутизация не будет работать правильно. Я убрал косые черты и все работает.
Неправильные маршруты:
routes:
'/': 'landing'
'/home': 'home'
'/register': 'register'
Правильные маршруты:
routes:
'': 'landing'
'home': 'home'
'register': 'register'