2013-02-04 29 views
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操作。有不同的請求和響應模型 - backbone.js

回答

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映射器爲每個模型。

另一種選擇是重寫Backbone.sync共,並且每個Model類型某種ModelRequestMapperModelResponseMapper和對象映射到(解)序列的每個模型。我覺得這會更復雜,但如果你有很多模型,可能會更好。

/代碼示例沒有測試

+0

我認爲有不同的請求和響應時,它能夠更好地去與普通的Ajax調用和BTW可我對他們兩人的一個共同的模式......,但沒有把它複雜。 – theJava

+0

+1爲答案。我可能不會爲toRequest和fromResponse方法而煩惱,但爲了將您的端點抽象爲模型,存在''''sync'''和''parse'''。當然你可以使用ajax調用方案,但是使用Backbone有什麼意義? –