Tuesday, December 25, 2012

Backbonejs process data before saving

Actual for backbone 0.9.9
If you need to process data before Bacbone.Model.save() sends data to server:

1) Change data after validating in toJSON() overwritten method:


somewhere in code:

this.save({
     password: param.password ,
     password_new: param.password_new ,
     password_confirmation: param.password_confirmation
}, {
success: successHandler,
error: errorHandler
});



in Model class:

toJSON: function(options) {
    // do the same but with processing
    return this.encode(Backbone.Model.prototype.toJSON.call(this, options));
},
encode: function(attrs){
    // encode passwords and remove confirmation
    attrs.password = $.md5(attrs.password);
    attrs.password_new =  $.md5(attrs.password_new);
    delete attrs.password_confirmation;
    return attrs;
},


2) Or simply pass 2 sets of data to save():


this.save({
    password: param.password ,
    password_new: param.password_new ,
    password_confirmation: param.password_confirmation
}, {
    success: successHandler,
    error: errorHandler,
    attrs:{
        password: $.md5(param.password) ,
        password_new: $.md5(param.password_new)
    }
});
First set of data will be validated and second used by sync in Backbone.sync:1437 (dev version) core function:
params.data = JSON.stringify(options.attrs || model.toJSON(options));

Tuesday, December 18, 2012