docs: function (vals, options) {
              if (this.synced) {
                  if (!this.__isNew) {
                      var self = this;
                      return this._checkTransaction(options, function () {
                          if (isHash(vals)) {
                              self.__set(vals);
                          }
                          var saveChange = !isEmpty(self.__changed);
                          return self.__callHooks("update", [options], function () {
                              return saveChange ? self._update(options) : null;
                          })
                              .chain(function () {
                                  return self._updateReload(options);
                              })
                              .chain(function () {
                                  if (self._static.emitOnUpdate) {
                                      self.emit("update", self);
                                      self._static.emit("update", self);
                                  }
                              })
                              .chain(function () {
                                  return self;
                              });
                      });
                  } else if (this.__isNew && this.__isChanged) {
                      return this.save(vals, options);
                  } else {
                      return when(this);
                  }
              } else {
                  throw new ModelError("Model " + this.tableName + " has not been synced");
              }
          }