_addItem = function () {
      self.items.push(item);
      self.$list.append(item.el);

      item.editor.on('all', function (event) {
        if (event === 'change') return;

        // args = ["key:change", itemEditor, fieldEditor]
        var args = _.toArray(arguments);
        args[0] = 'item:' + event;
        args.splice(1, 0, self);
        // args = ["item:key:change", this=listEditor, itemEditor, fieldEditor]

        editors.List.prototype.trigger.apply(this, args);
      }, self);

      item.editor.on('change', function () {
        if (!item.addEventTriggered) {
          item.addEventTriggered = true;
          this.trigger('add', this, item.editor);
        }
        this.trigger('item:change', this, item.editor);
        this.trigger('change', this);
      }, self);

      item.editor.on('focus', function () {
        if (this.hasFocus) return;
        this.trigger('focus', this);
      }, self);
      item.editor.on('blur', function () {
        if (!this.hasFocus) return;
        var self = this;
        setTimeout(function () {
          if (_.find(self.items, function (item) {
            return item.editor.hasFocus;
          })) return;
          self.trigger('blur', self);
        }, 0);
      }, self);

      if (userInitiated || value) {
        item.addEventTriggered = true;
      }

      if (userInitiated) {
        self.trigger('add', self, item.editor);
        self.trigger('change', self);
      }
    }
Add a new item to the list
@param {Mixed} [value]           Value for the new item editor
@param {Boolean} [userInitiated] If the item was added by the user clicking 'add' or pressing `Enter`