私はエンコードするデータのフォーマットを変更するためにBackbone.syncをオーバーロードしました。しかし、この方法では、配列である属性を保存することが問題になります。
おそらく、同期を無効にするより良い方法がありますが、このコードをbackbone.jsファイルの1180行目に追加しました。
//convert to form encoded
if (Backbone.sendFormEncoded) {
if (type === 'PUT' || type === 'DELETE' || type === 'POST') {
params.contentType = 'application/x-www-form-urlencoded';
var kvps = [], regEx = /%20/g;
var obj = model.toJSON();
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if(obj[key]) {
kvps.push(encodeURIComponent(key).replace(regEx, "+") + "=" + encodeURIComponent(obj[key].toString()).replace(regEx, "+"));
} else {
kvps.push(encodeURIComponent(key).replace(regEx, "+") + "=" + encodeURIComponent(obj[key]));
}
}
}
params.data = kvps ? kvps.join('&') : {};
}
}
このコードブロックを実行するには、必ずBackbone.sendFormEncodedをtrueに設定してください。