动态构建表单的Aurelia验证

动态构建表单的Aurelia验证,aurelia,Aurelia,我正在创建一个动态生成用户输入表单的自定义元素。到目前为止,它运行得很好,但我在设置Aurelia验证时遇到了问题,需要一些帮助 我的表单.html <div class="form-group" repeat.for="control of controls"> <label>${control.label}</label> <div> <compose containerless view-model="res

我正在创建一个动态生成用户输入表单的自定义元素。到目前为止,它运行得很好,但我在设置Aurelia验证时遇到了问题,需要一些帮助

我的表单.html

<div class="form-group" repeat.for="control of controls">
  <label>${control.label}</label>
  <div>
    <compose containerless
      view-model="resources/elements/${control.type}/${control.type}" 
      model.bind="{'control': control, 'model': model, 'readonly': readonly}"
      class="form-control"></compose>
  </div>
</div>
<template>
  <input type="text"
    class="form-control" 
    value.bind="model[control.bind] & validate">
</template>
import {inject} from 'aurelia-framework';
import {ValidationControllerFactory, ValidationRules} from 'aurelia-validation';
import {BootstrapFormRenderer} from 'common/bootstrap-form-renderer';

@inject(Core, ValidationControllerFactory)
export class MyForm {
  constructor(validationControllerFactory) {
    this.validationCtrl = validationControllerFactory.createForCurrentScope();
    this.validationCtrl.addRenderer(new BootstrapFormRenderer());
  }
  setupValidator() {
    let rules = [];
    this.controls.map(control => {
      if (control.validation) {
        rules.push(ValidationRules.ensure(control.bind).required().rules[0]);
    }
    this.validationCtrl.addObject(this.modelEdit, rules);
  }
}
父视图:

<my-form controls.bind="controls" model.bind="model" if.bind="controls"></my-form>
controls = [
  {label: 'Username', type: 'my-textbox', bind: 'user_username'},
  {label: 'Status', type: 'my-dropdown', bind: 'user_status', enum: 'ActiveInactive', default: '(Choose)'},
  {label: 'Last_login', type: 'my-datepicker', bind: 'user_lastlogin', vc: 'date'}];

ValidationRules
  .ensure('user_username').required().minLength(1).maxLength(10)
  .ensure('user_status').required()
  .ensure('user_lastlogin').required()
  .on(this.model);

我收到错误:ValidationController尚未注册。在ValidateBindingBehaviorBase.bind…。但是,对于整个动态构建的表单,我只需要一个验证器,所以我不想在每个控件中导入验证。我该怎么办?

它实际上可以在父窗体中导入验证控制器和相关资源,即使
&validate
附加到子控件

父视图模型

<div class="form-group" repeat.for="control of controls">
  <label>${control.label}</label>
  <div>
    <compose containerless
      view-model="resources/elements/${control.type}/${control.type}" 
      model.bind="{'control': control, 'model': model, 'readonly': readonly}"
      class="form-control"></compose>
  </div>
</div>
<template>
  <input type="text"
    class="form-control" 
    value.bind="model[control.bind] & validate">
</template>
import {inject} from 'aurelia-framework';
import {ValidationControllerFactory, ValidationRules} from 'aurelia-validation';
import {BootstrapFormRenderer} from 'common/bootstrap-form-renderer';

@inject(Core, ValidationControllerFactory)
export class MyForm {
  constructor(validationControllerFactory) {
    this.validationCtrl = validationControllerFactory.createForCurrentScope();
    this.validationCtrl.addRenderer(new BootstrapFormRenderer());
  }
  setupValidator() {
    let rules = [];
    this.controls.map(control => {
      if (control.validation) {
        rules.push(ValidationRules.ensure(control.bind).required().rules[0]);
    }
    this.validationCtrl.addObject(this.modelEdit, rules);
  }
}