toggleMessage: function (hide, message) {
        var mContainer = this.el.querySelector('[data-hook~=message-container]'),
            mText = this.el.querySelector('[data-hook~=message-text]');

        if (!mContainer || !mText) return;

        if (hide) {
            dom.hide(mContainer);
            mText.textContent = '';
            dom.removeClass(this.el, this.validClass);
            dom.removeClass(this.el, this.invalidClass);
            return;
        }

        if (message) {
            dom.show(mContainer);
            mText.textContent = message;
            dom.addClass(this.el, this.invalidClass);
            dom.removeClass(this.el, this.validClass);
        } else {
            dom.hide(mContainer);
            mText.textContent = '';
            dom.addClass(this.el, this.validClass);
            dom.removeClass(this.el, this.invalidClass);
        }
    }
SelectView.prototype.setMessage = function (message) {
    var mContainer = this.el.querySelector('[role=message-container]');
    var mText = this.el.querySelector('[role=message-text]');

    if (!mContainer || !mText) return;

    if (message) {
        dom.show(mContainer);
        mText.textContent = message;
        dom.addClass(this.el, this.invalidClass);
        dom.removeClass(this.el, this.validClass);
    } else {
        dom.hide(mContainer);
        mText.textContent = '';
        dom.addClass(this.el, this.validClass);
        dom.removeClass(this.el, this.invalidClass);
    }

    //var text = container.
    //this.el.querySelector('[role=message-text]').textContent(message);
    //var select = this.select;
    //this.message = message;
    //// there is an error
    //if (message && this.shouldValidate) {
    //    this.messageContainer.style.display = 'block';
    //    this.messageEl.textContent = message;
    //    dom.addClass(input, this.invalidClass);
    //    dom.removeClass(input, this.validClass);
    //} else {
    //    this.messageContainer.style.display = 'none';
    //    if (this.shouldValidate && this.editedDirectly) {
    //        dom.addClass(input, this.validClass);
    //        dom.removeClass(input, this.invalidClass);
    //    }
    //}
};
 getMatches(el, showValue, firstMatchOnly).forEach(function (match) {
     dom.show(match);
 });
  // implement in submodules
  beforeRender () {},

  // implement in submodules
  afterRender () {},

  // This really seems like it should be a built-in function in ampersand-view, but it isn't:
  // https://github.com/AmpersandJS/ampersand-view/blob/5c4192545c80d1682ba47f339306c66c00a8819c/ampersand-view.js#L168
  removeSubviews () {
    if (this._subviews) {
      invoke(flatten(this._subviews), 'remove');
    }
  },

  show () {
    dom.show(this.el);
  },

  hide () {
    dom.hide(this.el);
  },

  sliceCollection (collection, CollectionType, start, n) {
    if (!collection.length) {
      return new CollectionType();
    }
    if (n === 1) {
      return new CollectionType([collection.at(start)]);
    }
    return new CollectionType(collection.filter(function (item, itemIndex) {
      return (itemIndex >= start) && (itemIndex < (start + n));