当我打电话给导航时,我的路由器没有重定向的问题。
我使用'backbone-on-rails' gem 运行 Rails 设置。
问题似乎与应用程序的初始化方式有关。
应用程序
window.App =
Models: {}
Collections: {}
Views: {}
Routers: {}
initialize: ->
new App.Routers.Main()
Backbone.history.start({pushState: true})
$ ->
App.initialize()
路由器
class App.Routers.Main extends Backbone.Router
routes:
'': 'index'
'login': 'login'
initialize: ->
# Check login status
@check_login_status()
initialize_layout: ->
# Default layout template
layout = new App.Views.Layout
$('#main').html( layout.render().el )
# Navigation template
navigation = new App.Views.Navigation(user: @current_user)
$('#main nav[role="top"]').html( navigation.render().el )
# Return this
this
index: ->
@initialize_layout() unless @current_user.get('company_id') is null
this
login: ->
layout = new App.Views.Layout
$('#main').html( layout.render().el )
login = new App.Views.Login
$('#main .container-fluid').html(login.render().el)
check_login_status: ->
@current_user = new App.Models.CurrentUser
@current_user.fetch({
async: false
success: (data, status, xhr) ->
# If no user is logged in, and we arent on the login page, redirect to it
if data.get('company_id') is null and window.location.pathname isnt '/login'
# Navigate to login page
window.location.href = '/login'
})
在我的路由器中,我有一个初始化功能,可以检查用户是否已登录。我 console.log 一个简单的状态以轻松验证它,实际上它会注销“未登录”。
尽管如此,导航不会重定向到 /login。
如果我在启动路由器之前启动主干历史,那么导航部分可以工作,但是当我刷新页面(cmd + r)时,路由器不会运行索引方法。