验证observableArray与常规observable之间的区别

时间:2014-10-13 22:28:40

标签: knockout.js knockout-validation

使用knockout-validation我试图将一些简单的验证应用于一个可观察的数组,该数组检查它至少有n个项目。

我创建了一个简单的测试验证规则

ko.validation.rules['minSelected'] = {
    validator: function (val, minimum) {
        var result = (val.length >= minimum);
        console.dir(result);
        return result;
    },
    message: 'This field requires at least {0} selected items.'
};

我在我的模特身上申请

self.contacts = ko.observableArray().extend({ minSelected: 1 });

调用验证器函数,我可以通过console.dir()调用看到验证的正确结果,但结果似乎不会影响验证过程。

我还尝试创建一个始终为false的验证器,它在标准的observable上完美运行,但不适用于observableArray。

ko.validation.rules['never'] = {
    validator: function (val, param) {
        return false;
    },
    message: 'I will never be valid.'
};

self.single = ko.observable().extend({ never: 'ever' });
self.multiple = ko.observableArray().extend({ never: 'ever' });

我是否遗漏了有关可观察数组验证的内容?

1 个答案:

答案 0 :(得分:1)

我解决了这个问题,所以我在这里发布答案,这有助于其他问题。

验证似乎确实有效,但没有显示任何反馈。我使用了与validating a computed field相同的过程(添加了我自己的跨度,它绑定到验证消息并且eveything现在按预期工作。

以下是我如何开始工作的示例标记:

<select data-bind="options: contactList, 
                   optionsText: 'text', 
                   optionsValue: 'value', 
                   selectedOptions: contacts" 
        multiple>
</select>
<span data-bind="validationMessage: contacts" class="validationMessage"></span>