Save only certain model attributes in Backbone.js

When calling model.save() in Backbone.js all model attributes will be persisted (sent to the server).

It may be done by passing a specific option argument to toJSON method. It is done in save method. You may create a base class and extend all your models from that base class. This way all extended classes that will have whitelistSaveAttributes will whitelist attributes on saving:

whitelistSaveAttributes: ['body', 'message']

# Proxy save method
save: (key, val, options)->
  # If key is an object then second argument is options
  if not key? or typeof key is 'object'
    options = val or {}
    val = options

  if @whitelistSaveAttributes? and @whitelistSaveAttributes.length
    options.JSONType = 'save'

  Backbone.Model.prototype.save.call(this, key, val, options)

# Check for attributes that are functions
toJSON: (options = {})->
  json = Backbone.Model.prototype.toJSON.call(this)

  # On save send only whitelisted attributes
  if options?.JSONType is 'save'
    json = _.pick.apply(this, [json].concat(@whitelistSaveAttributes))

  return json