gpt4 book ai didi

knockout.js - knockout validation - 自定义验证器未显示消息

转载 作者:行者123 更新时间:2023-12-03 18:18:03 25 4
gpt4 key购买 nike

我在我的 View 模型中有 bool 属性,每个属性都绑定(bind)到一个复选框。我正在尝试编写一个自定义 knockout validation 程序,以确保至少选中一个复选框。我已经编写并连接了验证器(即它在复选框更改时触发,并且仅在未选中复选框时返回 false),但验证消息未显示。

首先,这是一个 fiddle :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();

这是 View 模型(为保护无辜者更改名称):

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,但是应该显示我的验证消息的范围什么都不显示。我假设我错过了一个步骤或一些简单的事情,但我找不到它。认为我盯着代码看的时间太长了。非常感谢任何帮助,谢谢。

更新:不过,我注意到,如果我将自定义验证器添加到验证组中,就会发现它无效的事实。我已经更新了 fiddle 来说明这一点。所以我的验证器正在工作,我只是无法显示该死的消息。

http://jsfiddle.net/internetH3ro/aRS4a/

最佳答案

请不要使用cdnjs的验证插件!

即使它的最新版本已经超过一年并且充满了错误,所以请使用来自 github 的最新版本直到cdnjs版本没有更新。

将验证插件更新到最新版本后,您只需在验证配置中设置 messagesOnModified: false

ko.validation.configure({
registerExtenders: true,
messagesOnModified: false,
insertMessages: true,
parseInputAttributes: true,
messageTemplate: null
});

演示 JSFiddle .

您需要这样做,因为您的可观察对象 self.customValidation 永远不会实际更新,它只提供验证器,但如果您的基础可观察对象已被修改,插件只会显示错误消息,除非您有 messagesOnModified: false 设置。

关于knockout.js - knockout validation - 自定义验证器未显示消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21439842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com