2015-10-15 4 views
2

, пожалуйста, помогите мне с ensureForEach, я не могу найти документы этого пункта. У меня есть класс:Как использовать aurelia-validation для элемента массива

export class EnterReplacements { 
    replacements: Replacement[] = null; 

    constructor(
     private router: Router, 
     private eventAggregator: EventAggregator, 
     private repoCreator: RepoCreator, 
     protected validation: Validation 
    ) { 
     this.validation = validation.on(this) 
      .ensureForEach('replacements') 
      .ensure('value') 
      .isNotEmpty() 
      .etc(); // repeat all the same stuff as in the Item validation 
    } 
} 

Это получает сообщение об ошибке во время выполнения:

ERROR [app-router] Error: Error instantiating EnterReplacements. Check the inner error for details. 

Это является моей HTML:

<div class="col-xs-12 col-sm-6 col-lg-4" repeat.for="replacement of replacements"> 
    <input class="string-input" type="text" value.bind="replacement.value" placeholder.bind="replacement.friendlyName" change.delegate="$parent.onChanged()"/> 
</div> 

Мне нужно проверить все value свойства элементов в replacements массиве не пусто. Пожалуйста помоги !!!

+0

Просто наше любопытство. Откуда вам получить .ensureForEach? Я могу найти ссылку в билете, где обсуждается возможная реализация. Но то, что я вижу, пока не существует. https://github.com/aurelia/validation/issues/10 – pantarhei

+0

Это верно, что нет обеспеченияForEach –

+0

Есть ли у нас другие способы проверки элемента в массиве? – Stiger

ответ

1

Вы можете использовать обобщенную функцию для проверки и сделать это самостоятельно (который будет отображаться на верхнем уровне в качестве проверки для массива)

this.validation = validation.on(this) 
     .ensure('replacements') 
     .isNotEmpty() 
     .passes(replacementsArray => { 
      let valid = true; 
      replacementsArray.forEach(v => { 
      valid = v != null && valid; 
      }); 
      return valid; 
     }); 

вещей быть осторожными:
- isNotEmpty() будет работать сначала (независимо от того, где он появляется)
- Я считаю, что isNotEmpty необходимо для запуска .passes() (это был мой опыт, хотя я не вижу упоминания об этом в документах)
- Я действительно не знаю что вы хотите проверить для каждого значения, поэтому я сделал проверка нулевой эквивалентности, которая, я думаю, удовлетворит ваши намерения isNotEmpty? Вероятно, вы захотите это изменить.

1

В соответствии с последней версией Aurelia-Validation, то Rules для проверки того, что массив заполнен может быть сделано через 2-мя способами:

Самый простой способ с minItems(count), например, мы будем использовать minItems(1), чтобы убедиться, что массив заполняется не менее чем одним предметом.

Второй способ, который также работает (мы могли бы использовать это для очень специфических правил валидации)

satisfies(value => Array.isArray(value) && value.length > 0)