ko异步验证插件

时间:2015-10-08 20:55:20

标签: ajax asynchronous knockout.js

[增订]

我不确定如何向我的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放入数据绑定中,就像它似乎说的那样,但是它没有用。

我应该在这里指出两个令人困惑的方面:

  1. 此同一领域还有其他验证器(ierequired和pattern)
  2. 此表单中还有其他字段需要验证。 (配置对象说messageTemplate应该是&#39; id,用于所有您的验证消息&#39; 。我只想要它这一个领域。)

0 个答案:

没有答案