2
//A backbone model
var RequestModel = Backbone.Model.extend({});

//A backbone model
var ResponseModel = Backbone.Model.extend({});

RequestModel.save({
    success: function (ResponseModel ) {
        alert(ResponseModel .toJSON());
    }
})

リクエストとレスポンスの両方が一致しないため、リクエストとレスポンスに別々のモデルを使用できますか。これは完全な RPC 呼び出しであり、CRUD 操作ではありません。

4

1 に答える 1

4

これと同じ問題を以前に考えたことがありますが、Backbone でこれを実現する優れた方法はないと感じています。私が思いついた最善の方法は、モデルにfromResponseandtoRequestメソッドを実装し、オーバーライドmodel.parsemodel.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マップして、各モデルを (逆) シリアル化することです。それはより複雑になると思いますが、モデルがたくさんある場合は、より適切にスケーリングできる可能性があります。ModelModelRequestMapperModelResponseMapper

/コードサンプルはテストされていません

于 2013-02-04T21:31:58.027 に答える