[增订]
我不确定如何向我的async knockout验证器添加自定义(html)消息。
下面是一个简单的表格。您可以看到已经存在一些isModified和isValid验证,但它不是异步的。 (我不确定这是否会使解决方案变得复杂或简化。)
<form
method="post"
action="Registration()"
novalidate
data-bind="submit: onRegister">
<div
class="input-wrapper email"
data-bind="
validationOptions: {
messageTemplate: 'emailCollisionTemplate'
},
validationElement: EmailAddress,
css: { 'validation-success': EmailAddress.isModified() && EmailAddress.isValid() }">
<input
type="email"
id="registerModalEmail"
data-bind="
value: EmailAddress,
ariaInvalid: EmailAddress"
aria-describedby="email-address-error"
required />
</div>
<div
class="validation-error-message"
id="email-address-error"
data-bind="validationMessage: EmailAddress">
</div>
</form>
<script type="text/html" id="emailCollisionTemplate">
<span>This email is already registered. Please <a href="myUrl/login?">sign in</a>.
</span>
</script>
然后是一些js:
self.EmailAddress = ko.observable().extend({
required: {
params: true,
message: 'required'
)
},
pattern: {
params: '@',
message: 'match'
)
},
validation: {
async: true,
validator: function (val, parms, callback) {
$.ajax({
url: 'myUrl/isEmailAllowed',
data: { 'EmailAddress': val },
type: 'POST',
success: function (results) {
if (results) {
callback(true);
}
},
error: function (xhr) {
callback(false);
}
});
}
}
});
(isModified和isValid在别处处理,所以我没有把它包括在内。)
如何配置要显示的messageTemplate?我看了一些例子,但它们似乎都不符合我在这里所做的。我已经将validationOptions放入数据绑定中,就像它似乎说的那样,但是它没有用。
我应该在这里指出两个令人困惑的方面: