У меня возникают проблемы с использованием Aurelia Validation с динамически построенными правилами валидации. Я был успешным (но не так элегантно) в создании правил динамически на основе свойства проверки массива элементов формы, например:Использование Aurelia validation addObject и removeObject при замене модели
ctrlAccountSettings = [
{label: 'Code', type: 'my-textbox', bind: 'acc_code', validation: '.required().minLength(17).maxLength(30)'},
{label: 'Name_orig', type: 'my-textbox', bind: 'acc_name_orig', validation: '.required().minLength(3).maxLength(100)'},
{label: 'Name_tran', type: 'my-textbox', bind: 'acc_name_tran', validation: '.minLength(3).maxLength(100)'},
{label: 'Description', type: 'my-textarea', rows: '3', bind: 'acc_description', validation: '.maxLength(255)'},
{label: 'Status', type: 'my-dropdown', bind: 'acc_status', enum: 'ActiveInactive', validation: '.required()'}];
И этот код, чтобы создать/применять правила, на мой взгляд-модели :
attached() {
// define rules based on controls
this.rules = [];
this.controls.map(control => {
if (control.validation) {
if (control.validation.match(/\.required\(\)/)) { this.rules.push(ValidationRules.ensure(control.bind).required().rules[0]); }
let minLength = control.validation.match(/\.minLength\(([0-9]+)\)/);
if (minLength) { this.rules.push(ValidationRules.ensure(control.bind).minLength(minLength[1]).rules[0]); }
let maxLength = control.validation.match(/\.maxLength\(([0-9]+)\)/);
if (maxLength) { this.rules.push(ValidationRules.ensure(control.bind).maxLength(maxLength[1]).rules[0]); }
}
});
// initialize modelEdit and add validation rules
this.modelEdit = {};
// this.validationCtrl.removeAllObjects(); doesn't exist
// this.validationCtrl.removeObject(this.modelEdit); doesn't work
// this.validationCtrl.destroy(); not sure how to recover from this
this.validationCtrl.addObject(this.modelEdit, this.rules);
}
проблема заключается в том, что, так как это тот же компонент повторно прикреплены несколько раз, я получаю повторяющиеся правила вялые, которые предотвращают форму от проверяемого.
Вопрос 1 (самое главное): Как использовать removeObject()
или аналогичный метод для очистки предыдущей проверки?
Вопрос 2: Есть ли лучший способ применить правила проверки из моего массива контрольных объектов динамически? Мне не нравится создавать this.rules.push()
вариант для каждый тип правила.
Вопрос 3: Мои элементы управления не меняются. Есть ли лучший способ сохранить правила на месте, даже когда объект поменяется?
Вот что вы можете использовать для создания вашей проблемы: https://gist.run/?id=381fdb1a4b0865a4c25026187db865ce –
Спасибо. Вот пример того, что я пытаюсь сделать.Похоже, что основная проблема, которую я испытывал, исправляется добавлением 'controller.reset()' перед заменой объекта. Но это не отвечает на вопросы 2 и 3. Любые идеи или предложения, касающиеся моего кода? https://gist.run/?id=22f17210934d436e231b223b235fcd32 – LStarky