code: function(model, options) {
              var index, existing;
  
              if (_.isArray(model)) {
                  return _.map(model, function(m) {
                      return this.add(m, _.clone(options));
                  }, this);
              }
  
              // Manage {list:[], n:0} for infinite list
              if (_.size(model) == 2
              && model.list != null && model.n != null) {
                  this._totalCount = model.n;
                  return this.add(model.list, options);
              }
  
              options = _.defaults({}, options || {}, {
                  at: this.models.length,
                  merge: false,
                  silent: false
              });
  
              model = this._prepareModel(model);
  
              if (existing = this.get(model)) {
                  if (options.merge) {
                      existing.set(model.toJSON())
                  }
                  return this;
              }
  
              this._byId[model.id] = model;
  
              this.listenTo(model, 'all', this._onModelEvent);
              this.listenTo(model, 'id', this._onModelId);
  
              index = options.at;
              this.models.splice(index, 0, model);
  
              if (options.silent) return this;
              options.index = index;
              this.trigger('add', model, this, options);
  
              if (this.comparator) this.sort({silent: options.silent});
              return model;
          }
docs: Add a model to the collection (or an array of model)
  
  @method add
  @param {Model} model model or data to add (could also be an array)
  @param {object} [options] options for adding
  @chainable