所以我的目标网页视图中有一个按钮,当点击它时,应该将我的用户路由到注册网址,在路由器中启动我的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)
在我的目标网页视图中,单击该按钮时,我会在chrome工具中获得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()
)
此外,网址栏中的地址通道,例如,当我点击着陆页按钮时,网址从localhost:3000
更改为localhost:3000/register
,但我没有得到console.log在路由器中,页面不呈现。
有人可以帮我解决这个错误吗?
答案 0 :(得分:2)
一小时的调试,这是......一个愚蠢的拼写错误。
如果您在/
中routes
对象前面加Backbone.Router
,则路由将无法正常工作。我删除了正斜杠,一切正常。
路线不正确:
routes:
'/': 'landing'
'/home': 'home'
'/register': 'register'
纠正路线:
routes:
'': 'landing'
'home': 'home'
'register': 'register'