TL;DR バージョン:
Backbone を使用して Phonegap アプリを構築し、Client というモデルと Clients というコレクションを作成します。Tastypie API を使用して別のサーバーと通信します。を実行するfetch()
と、URL は正しい絶対 URL を使用します( .http://127.0.0.1:8000/api/v1/client/1/
Client.destroy()
file:///api/v1/client/1/
長いバージョン:
Django/Tastypie API を使用する Backbone.js を使用してモバイル アプリを構築していますが、理解できない一見奇妙な動作に遭遇しました。
ファイルの先頭でサーバーのベース URL を定義します。
// Set the base URL for querying the API
baseUrl = 'http://127.0.0.1:8000/api/v1/';
次のモデルとコレクションがあります。
// Client model
Client = Backbone.Model.extend({
urlRoot: baseUrl + 'client',
// Default values
defaults: {
id: '',
name: '',
mobile: '',
email: '',
notes: '',
operator: '',
date_client_joined: '',
address: '',
postcode: ''
}
});
// Client collection
Clients = Backbone.Collection.extend({
// Will hold Client objects
model: Client,
// Set URL
url: baseUrl + 'client/'
});
また、個々のクライアントは、次のビューを使用してリストに表示されます。
// Client list item view
ClientListItemView = Backbone.View.extend({
tagName: 'li',
events: {
'click .delete': 'deleteclient'
},
render: function () {
// Render the client list item template
var template = _.template($('#client-list-item-template').html());
this.$el.html(template(this.model.toJSON()));
// Return the object
return this;
},
deleteclient: function () {
this.model.destroy();
return false;
}
});
現在、アプリは実際に jQuery Mobile を使用しており、各クライアントの横に delete クラスの [削除] ボタンがあるため、これらのボタンの 1 つがクリックされるたびに deleteclient 関数が実行されます。また、backbone-tastypie を使用して、Backbone と Tastypie の間の矛盾を解決しています。
deleteclient 関数は実行されていますが、HTTP DELETE 要求を の相対 URL に送信しますfile:///api/v1/client/1/
(これは Phonegap アプリであるため、ローカルでファイルを表示しているだけです)。ドキュメント設定 urlRoot から手動で行く方法のように見えますが、そうしても問題は解決しないようです。ただし、fetch() 関数を実行してコレクションにデータを入力すると、まったく問題なく動作します。正しい絶対 URL が使用されます。
それで、私の質問は、デフォルトの動作をオーバーライドして、HTTP DELETE リクエストが正しい URL に送信されるようにするにはどうすればよいですか?