docs: function (options, callback) {
  
              options = options || {};
              _.defaults(options, {
                  invalidatePageCache: false
              });
  
              if (this._save.state === SAVESTATE.SAVING) {
                  if (callback) {
                      // currently fetching -> register callback
                      this._save.callbacks.push(callback);
                  }
              } else {
                  this._save.state = SAVESTATE.SAVING;
  
                  var self = this;
  
                  try {
                      var status = this._status();
                      if (status === STATE.NEW || status === STATE.CREATED) {
                          this.$context.$dataSource.saveModel(this, options, function (err, result) {
                              self._save.state = err ? SAVESTATE.ERROR : SAVESTATE.CREATED;
  
                              if (!err && self.$collection && options.invalidatePageCache) {
                                  self.$collection.invalidatePageCache();
                              }
  
                              callback && callback(err, result, options);
  
                              _.each(self._save.callbacks, function (cb) {
                                  cb.call(self, err, result);
                              });
  
                              self._save.callbacks = [];
                          });
                      } else {
                          throw new Error("status '" + status + "' doesn't allow save");
                      }
                  } catch (e) {
  
                      self._save.state = SAVESTATE.ERROR;
  
                      if (callback) {
                          callback(e);
                      }
  
                      _.each(self._save.callbacks, function (cb) {
                          cb.call(self, err, self);
                      });
  
                      self._save.callbacks = [];
                  }
              }
  
          }