【发布时间】:2014-02-21 18:33:22
【问题描述】:
我的视图模型中有布尔属性,每个属性都与一个复选框相关联。我正在尝试编写一个自定义剔除验证器,以确保至少选中一个复选框。我已经编写并连接了验证器(即,它在复选框更改时触发,并且仅在未选中任何复选框时返回 false),但没有显示验证消息。
首先,这是一个小提琴:http://jsfiddle.net/internetH3ro/aRS4a/10/
这里是验证器:
ko.validation.rules['requiresOneOf'] = {
getValue: function (o) {
return (typeof o === 'function' ? o() : o);
},
validator: function (val, fields) {
var self = this;
var result = true;
ko.utils.arrayForEach(fields, function (field) {
var val = self.getValue(field);
if (val) {
result = false;
}
});
return result;
},
message: 'Must select one option'
};
ko.validation.registerExtenders();
这是视图模型(更改名称以保护无辜者):
function ViewModel() {
var self = this;
self.checkboxOne = ko.observable(true);
self.checkboxTwo = ko.observable(true);
self.checkboxThree = ko.observable(true);
self.checkboxFour = ko.observable(true);
self.customValidation = ko.observable().extend({
requiresOneOf: [self.checkboxOne, self.checkboxTwo, self.checkboxThree, self.checkboxFour]
});
}
以及相关的 HTML:
<label>
<input type="checkbox" data-bind="checked: checkboxOne" />Checkbox One
</label><br />
<label>
<input type="checkbox" data-bind="checked: checkboxTwo" />Checkbox Two
</label><br />
<label>
<input type="checkbox" data-bind="checked: checkboxThree" />Checkbox Three
</label><br />
<label>
<input type="checkbox" data-bind="checked: checkboxFour" />Checkbox Four
</label>
<span data-bind="validationMessage: customValidation"></span>
我已经通过验证器并确认当没有选中任何复选框时,它返回 false,但是应该显示我的验证消息的跨度不显示任何内容。我假设我错过了一个步骤或一些简单的东西,但我找不到它。认为我一直盯着代码太久了。任何帮助将不胜感激,谢谢。
更新:不过,我注意到,如果我将自定义验证器添加到验证组,就会发现它无效。我已经更新了小提琴来说明这一点。所以我的验证器正在工作,我只是无法显示该死的消息。
【问题讨论】:
标签: knockout.js knockout-validation