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'
Другие вопросы по тегам