具有不同的请求和响应模型 - backbone.js

时间:2013-02-04 21:14:13

标签: javascript backbone.js

//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操作。

1 个答案:

答案 0 :(得分:4)

我以前考虑过同样的问题,我觉得在Backbone中没有很棒的方法来实现这个目标。我提出的最好的方法是在模型上实现fromResponsetoRequest方法,并覆盖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);
  }
});

如果在某种基类中覆盖了parsesync,那么您只需要为每个模型实现fromResponsetoRequest映射器。 / p>

另一种选择是完全覆盖Backbone.sync,并将每个Model类型映射到某种ModelRequestMapperModelResponseMapper对象,以(去)序列化每个模型。我觉得这会更复杂,但如果你有很多模型,可能会更好地扩展。

/代码示例未经过测试