デフォルトでBackbone.syncは、AJAX リクエストがエラー状態を返した場合 (そして、302 はエラーです)、例外は発生しません。エラー処理は に任せます$.ajax。デフォルトsync は次のようになります。
Backbone.sync = function(method, model, options) {
// A bunch of bureaucratic setup and what not...
// Make the request, allowing the user to override any Ajax options.
return Backbone.ajax(_.extend(params, options));
};
そしてBackbone.ajaxただ$.ajaxです。上記は Backbone の現在のマスター ブランチであり、現在リリースされているバージョンが$.ajax直接使用していることに注意してください。
あなたがしたいことはBackbone.sync、常に次のようなエラーハンドラーを強制するものに置き換えることです:
error: (xhr, text_status, error_thrown) ->
if(xhr.status == 302)
window.location.replace('http://localhost:8080/login')
else
# call the supplied error handler if any
このような何かがうまくいくはずです:
parentSynchMethod = Backbone.sync
Backbone.sync = (method, model, options) ->
old_error = options.error
options.error = (xhr, text_status, error_thrown) ->
if(xhr.status == 302)
window.location.replace('http://localhost:8080/login')
else
old_error?(xhr, text_status, error_thrown)
parentSyncMethod(method, model, options)
Backbone のマスター ブランチを使用している場合 (またはBackbone.ajaxリリース バージョンでこれを読んでいる場合)、Backbone.ajax上記のようにエラー ハンドラーを強制するものに置き換えてそのままにしておくことができますBackbone.sync。