Проверка Aurelia в списке выбора

У меня есть простой список выбора в моем представлении Aurelia, в котором я пытаюсь установить значение по умолчанию "Выбрать...". Я также использую плагин aurelia-validation, чтобы убедиться, что значение изменено до отправки формы. Плагин отлично работает для других типов полей в моем проекте.

<div class="form-group">
                <label for="agencies" class="control-label">Agency</label>
                <select value.bind="agencyId" class="form-control">
                  <option value="">Select..</option>
                  <option repeat.for="agency of agencies" value.bind="agency.id">${agency.name}</option>
                </select>
              </div>

В ВМ:

constructor(validation) {
    this.agencies = null;
    this.agencyId = 0;
    this.validation = validation.on(this)
        .ensure('agencyId')
          .isNotEmpty();
}
activate() {
    //call api and populate this.agencies 
}

После первоначальной загрузки страницы мои агентства отображаются в списке, и мое значение по умолчанию является правильным, но в нем отображается сообщение об ошибке проверки: введите описание изображения здесь

Другие поля формы, такие как текстовые поля, не делают этого и не показывают сообщения об ошибках, пока пользователь не взаимодействует с элементами управления формы.

Есть ли что-то особенное, что мне нужно сделать для списка выбора, чтобы скрыть ошибки проверки при начальной загрузке представления? Я подозреваю, что привязка списка выбора в представлении каким-то образом вызывает событие изменения.

1 ответ

Благодаря доброму пользователю Aurelia на Gitter, проблема была решена путем установки начального значения this.agencyId в "". Первоначально у меня был this.agencyId = null. Это была моя ошибка. Поскольку он был нулевым, а не "" (как было значением по умолчанию в списке выбора), значения не совпадали, поэтому список выбора был недействительным при загрузке представления. По крайней мере, это мое понимание.

Урок заключается в том, что если вы хотите проверить список выбора, убедитесь, что ваше свойство VM инициализировано с тем же значением, что и значение по умолчанию вашего списка выбора.

constructor() {
    this.agencyId = ""; **//must match the bound property's initial value**
}

И в представлении:

<div class="form-group">
  <label for="agencies" class="control-label">Agency</label>
    <select value.bind="agencyId" class="form-control">
     <option value="" **<!-- this value must match the VM initial value -->** selected="true">Select...</option>
      <option repeat.for="agency of agencies" value.bind="agency.id">${agency.name}</option>
    </select>
</div> 
Другие вопросы по тегам