【发布时间】:2016-02-25 10:32:55
【问题描述】:
小问题:当验证是子自定义元素的一部分时,如何验证父表单?
加长版:
我构建了一个可重用的自定义元素,其中包括验证,它的工作方式与我期望的一样:
验证输入.html:
<template>
<div class="form-group" validate.bind="validation">
<label></label>
<input type="text" value.bind="wert" class="form-control" />
</div>
</template>
验证输入.js:
import { bindable, inject } from 'aurelia-framework';
import { Validation } from 'aurelia-validation';
@inject(Validation)
export class ValidatedInputCustomElement {
@bindable wert;
constructor(validation) {
this.validation = validation.on(this)
.ensure('wert')
.isNotEmpty()
.isGreaterThan(0);
}
}
我将有一些表单在同一个视图中多次使用此自定义元素(最多可达 8 次或 12 次甚至更多)。一个非常简化的示例可能如下所示:
<template>
<require from="validated-input"></require>
<form submit.delegate="submit()">
<validated-input wert.two-way="val1"></validated-input>
<validated-input wert.two-way="val2"></validated-input>
<validated-input wert.two-way="val3"></validated-input>
<button type="submit" class="btn btn-default">save</button>
</form>
</template>
在对应的viewmodel文件中我想确保只有在一切有效的情况下才能提交数据。我想做类似的事情
this.validation.validate()
.then(() => ...)
.catch(() => ...);
但我还不明白如何(或是否)可以将整体验证拉入父视图。
到目前为止,我想出的是像这样引用我的验证输入的视图模型:
<validated-input wert.two-way="val1" view-model.ref="vi1"></validated-input>
然后像这样在父级中检查它:
this.vi1.validation.validate()
.then(() => ...)
.catch(() => ...);
但这会让我需要调用它 8/12/... 次。
我可能会在表单中包含一些额外的验证。
这是一个带有示例的 plunkr: https://plnkr.co/edit/v3h47GAJw62mlhz8DeLf?p=info
【问题讨论】:
标签: aurelia