code: function(options) {
        options = options || {};
        var changing = this._changing;
        this._changing = true;
  
        // Silent changes become pending changes.
        var self = this;
        Parse._objectEach(this._silent, function(attr) {
          self._pending[attr] = true;
        });
  
        // Silent changes are triggered.
        var changes = _.extend({}, options.changes, this._silent);
        this._silent = {};
        Parse._objectEach(changes, function(unused_value, attr) {
          self.trigger('change:' + attr, self, self.get(attr), options);
        });
        if (changing) {
          return this;
        }
  
        // This is to get around lint not letting us make a function in a loop.
        var deleteChanged = function(value, attr) {
          if (!self._pending[attr] && !self._silent[attr]) {
            delete self.changed[attr];
          }
        };
  
        // Continue firing `"change"` events while there are pending changes.
        while (!_.isEmpty(this._pending)) {
          this._pending = {};
          this.trigger('change', this, options);
          // Pending and silent changes still remain.
          Parse._objectEach(this.changed, deleteChanged);
          self._previousAttributes = _.clone(this.attributes);
        }
  
        this._changing = false;
        return this;
      }
docs: Call this method to manually fire a `"change"` event for this model and
  a `"change:attribute"` event for each changed attribute.
  Calling this will cause all objects observing the model to update.