メソッドを拡張するための最良の方法は何ですか?model.save
同じデータをバックエンドに投稿するための新しいメソッドを追加する必要があります。すなわち:played
メソッドは(POSTによって)要求する必要がありますapiurl/model/:id/played
例えば:
var Game = Backbone.Model.Extend({
baseUrl: '/games/',
played: function(){
this.url = this.baseUrl + this.id + '/played'
this.save();
}
});
var game = new Game({id:3234}); //is only an example, instances are created before previuosly
game.played();
この方法は機能していますが、リクエストはGETです。さらに、これがsave()
リクエスト内のすべての属性を送信しなかった場合は完璧です。
情報の追加: クロスドメインAPIを操作する必要があるため、JSONPを操作するためにsyncメソッドを拡張しました。さらに、いくつかのセキュリティ手順を追加しました。
//backbone sync
Backbone._sync = Backbone.sync;
Backbone.sync = function(method, model, options) {
//network
options.timeout = 10000;
options.dataType = "jsonp";
//security
if(_conf.general.accessToken){
var ak = _conf.general.accessToken,
url = model.url,
linker = url.indexOf('?') === -1 ? '?':'&';
model.url = url + linker + 'accessToken=' + ak+'&callback=';
}
//error manager
var originalError = options.error || function(){};
options.error = function(res){
originalError(res.status, $.parseJSON(res.responseText));
};
//call original Method
Backbone._sync(method, model, options);
};