2012-05-11 4 views
3

私はバックボーン・テイストタイプを使用していますが、それを正しく動作させるには非常に時間がかかります。 Tastypieでは、自分のリソースにApiKeyAuthenticationを使用しています。そのため、すべてのAjaxリクエストに、リクエストの最後にapikeyとユーザー名を追加するか、ユーザー名とapiキーを追加するヘッダーを追加する必要があります。Backbone.syncをオーバーライドして、最後にapikeyとユーザー名を追加する方法はありますか?

私は次のコードでバックボーンを使用してビューし、そのモデルを削除しようとしています:関数が実行

// Remove the goal update view from the DOM 
removeItem: function() { 
    this.model.destroy({wait: true, success: function() { 
    console.log("success"); 
    }, error: function() { 
    console.log("error"); 
    }}); 
}, 

した後、ブラウザは、次のURLにGETリクエストを行うにしようとします。

:8000/api/v1/update/2/ 

最後にapi_keyまたはusernameは含まれず、URLの末尾にスラッシュが付きます。私は、Backbone.oldSyncを使ってGETリクエストをしようとしていると思います。どのようにして同期が終わりにusername/apiキーを含み、末尾のスラッシュを削除するのですか?他の要求のすべてにおいて

APIキーやユーザ名がバックボーンtastypieに次のコードを追加することにより、httpリクエストの最後に追加されたので、私はそれを作っています

if (!resp && (xhr.status === 201 || xhr.status === 202 || xhr.status === 204)) { // 201 CREATED, 202 ACCEPTED or 204 NO CONTENT; response null or empty. 
    var location = xhr.getResponseHeader('Location') || model.id; 
    return $.ajax({ 
     url: location + "?" + "username=" + window.app.settings.credentials.username + "&api_key=" + window.app.settings.credentials.api_key, 
     success: dfd.resolve, 
     error: dfd.reject, 
    }); 
} 
+0

[Backbone.sync?を上書きする方法](http://stackoverflow.com/questions/5096549/how-to-override -backbone-sync) – Ben

答えて

17

はのは、探検してみましょうヘッダ

あなたがajaxSendをオーバーライドして沿って情報を送信するために、ヘッダーを使用できるようにBackbone.syncはまだちょうどjQueryのAJAXを使用しての使用の可能性

。あなたがdestroyfetchupdatesave方法はAJAX呼び出し元にただのショートカットであることを覚えて、ちょうど1か2つの場所に情報を送信する必要がある場合はAjaxのオプション

を使用して

$(document).ajaxSend(function(e, xhr, options) 
{ 
    xhr.setRequestHeader("username", window.app.settings.credentials.username); 
    xhr.setRequestHeader("api_key", window.app.settings.credentials.api_key); 
}); 

。次のようなこれらのメソッドにall jQuery ajax parametersを追加することができますので:あなたのニーズに応じてjQueryのAJAXの方法

をオーバーライド

// Remove the goal update view from the DOM 
removeItem: function() 
{ 
    this.model.destroy({ 
     wait: true, 
     success: function() 
     { 
      console.log("success"); 
     }, 
     error: function() 
     { 
      console.log("error"); 
     }, 
     data: 
     { 
      username: window.app.settings.credentials.username, 
      api_key: window.app.settings.credentials.api_key 
     } 
    }); 
} 

、これは(より高度な実装であるかもしれないあなたがかもしれない、これは何の生産コードではないことに注意してくださいあなたがmodel.destroyを行うときに、ちょうどこの記事の将来の読者のため

(function ($) { 
    var _ajax = $.ajax; 
    $.extend(
    { 
     ajax: function (options) 
     { 
      var data = options.data || {}; 
      data = _.defaults(data, { 
       username: window.app.settings.credentials.username, 
       api_key: window.app.settings.credentials.api_key 
      }); 
      options.data = data; 
      return _ajax.call(this, options); 
     } 
    }); 
})(jQuery); 
+0

私はもう1つのオプションを提案します: '$ .ajaxPrefilter'(http://api.jquery.com/jQuery.ajaxPrefilter/)を使って、jQueryの' $ .ajax'をオーバーライドするのと同様の効果を得る実際に何かをオーバーライドする必要があります。 – machineghost

0

)ニーズに合わせて、それを使用する前に、これをテストするために、これを変更する必要があります()あなたは、削除REQので、任意のデータを渡すことはできませんuestはボディを持っていません。詳細については、この問題を参照してください。 https://github.com/documentcloud/backbone/issues/789

関連する問題