使用Knockout验证Observable Array.验证



我们正在使用Knockout、Durandal&微风

我们有一个可观测的阵列,&想要验证它是否包含任何值,即接受值的文本框是否提供了任何值。我正在尝试使用Knockout.Validation插件来实现这一点。

视图模型的代码为-

withs = ko.observableArray([]).extend({ required: true }),

HTML是

<div class="col-lg-9">
   <select multiple="true" 
        data-bind="options: entities, optionsValue: 'Id', optionsText: 'Name', 
                   selectedOptions: withs, select2: {}" 
        style="width: 249px; border-radius: 4px;"></select>
</div>

您可以编写一个自定义验证器,如:

ko.validation.rules['arrayMustContainAtLeastOne'] = {
    validator: function (val, required) {
        if (required) {
            if (val.length > 0) {
                return true;
            }
            return false;
        }
        return true;
    },
    message: 'Require at least one item in list'
}

会仔细检查文档,看看是否首先包括

这里是另一种方法。

ko.validation.rules['minArrayLength'] = {
    validator: function (obj, params) {
        return obj.length >= params.minLength;
    },
    message: "Array does not meet minimum length requirements"
};
//Must call registerExtenders() or there will be no validation.
//It won't throw any errors either, it will just be ignored
ko.validation.registerExtenders();
//if you use this commented binding, the minLength will not come through correctly
//ko.observableArray([]).extend({ minArrayLength: { minLength: 1, message: 'Must select at least one item'} });
ko.observableArray([]).extend({ minArrayLength: { params: { minLength: 1 }, message: 'Must specify at least one unit per part number' } });

Thewad的解决方案当然是有效的,但如果您在自定义验证规则之后没有调用registerExtenders(),它可以解释为什么验证不适用于您。

最新更新