我以前就想過過這個相同的問題,我覺得在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
映射器爲每個模型。
另一種選擇是重寫Backbone.sync
共,並且每個Model
類型某種ModelRequestMapper
ModelResponseMapper
和對象映射到(解)序列的每個模型。我覺得這會更復雜,但如果你有很多模型,可能會更好。
/代碼示例沒有測試
我認爲有不同的請求和響應時,它能夠更好地去與普通的Ajax調用和BTW可我對他們兩人的一個共同的模式......,但沒有把它複雜。 – theJava
+1爲答案。我可能不會爲toRequest和fromResponse方法而煩惱,但爲了將您的端點抽象爲模型,存在''''sync'''和''parse'''。當然你可以使用ajax調用方案,但是使用Backbone有什麼意義? –