デフォルトで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
。