//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操作。
答案 0 :(得分:4)
我以前考虑过同样的问题,我觉得在Backbone中没有很棒的方法来实现这个目标。我提出的最好的方法是在模型上实现fromResponse
和toRequest
方法,并覆盖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
映射器。 / p>
另一种选择是完全覆盖Backbone.sync
,并将每个Model
类型映射到某种ModelRequestMapper
和ModelResponseMapper
对象,以(去)序列化每个模型。我觉得这会更复杂,但如果你有很多模型,可能会更好地扩展。
/代码示例未经过测试