我们正在使用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(),它可以解释为什么验证不适用于您。