docs: function(alias, mapping, models, copy) {
        var computed, fields,
          config = {};
        if (_.isString(mapping)) {
          fields = mapping.split(' ');
        } else if (mapping === true) {
          fields = undefined;
        } else if (_.isObject(mapping)) {
          mapping = _.clone(mapping);
          computed = true;
        }
        config.computed = computed;
        if (computed) {
          config.mapping = mapping;
          _.each(this.__getModelAliases(config), function(modelAlias) {
            var configMappingForAlias = config.mapping[modelAlias];
            if (_.isString(configMappingForAlias)) {
              configMappingForAlias = configMappingForAlias.split(' ');
            } else if (configMappingForAlias === true) {
              configMappingForAlias = undefined;
            }
            config.mapping[modelAlias] = configMappingForAlias;
          });
        } else {
          config.mapping = fields;
        }
        this.__currentMappings[alias] = config;
        if (models) {
          if (computed) {
            this.trackModels(models, copy);
          } else {
            this.trackModel(alias, models, copy);
          }
        }
      }