ナビゲートを呼び出したときにルーターがリダイレクトされないという問題があります。
「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)、ルーターはインデックス メソッドを実行しません。