これと同じ問題を以前に考えたことがありますが、Backbone でこれを実現する優れた方法はないと感じています。私が思いついた最善の方法は、モデルにfromResponse
andtoRequest
メソッドを実装し、オーバーライドmodel.parse
しmodel.sync
て、モデル オブジェクトをそれらにマップすることです。何かのようなもの:
var Model = Backbone.Model.extend({
fromResponse: function(responseAttrs) {
var modelAttrs = {}; //map response attributes to modelAttrs
return modelAttrs;
},
toRequest: function() {
//map model attributes to response attributes here
var modelAttrs = this.toJSON();
var responseAttrs = {}; //map models attributes to requestAttrs
return responseAttrs;
},
parse: function(response) {
return this.fromResponse(response);
},
sync: function(method, model, options) {
options = options || {};
options.data = this.toRequest();
Backbone.sync(method, model, options);
}
});
parse
およびsync
が何らかの基本クラスでオーバーライドされている場合、モデルごとにfromResponse
およびマッパーを実装するだけで済みます。toRequest
別のオプションは、完全にオーバーライドし、各タイプを何らかの種類のオブジェクトにBackbone.sync
マップして、各モデルを (逆) シリアル化することです。それはより複雑になると思いますが、モデルがたくさんある場合は、より適切にスケーリングできる可能性があります。Model
ModelRequestMapper
ModelResponseMapper
/コードサンプルはテストされていません