我在尝试做时遇到了问题:
newNoteText: ko.observable().extend({ required: { onlyIf: function () { return this.ShowNote == true } } })
我注意到这不起作用,但是当我像这样放回代码时,它可以正常工作:
newNoteText: ko.observable().extend({ required: true })
我在尝试做时遇到了问题:
newNoteText: ko.observable().extend({ required: { onlyIf: function () { return this.ShowNote == true } } })
我注意到这不起作用,但是当我像这样放回代码时,它可以正常工作:
newNoteText: ko.observable().extend({ required: true })
在规则上使用该onlyIf
选项的正确语法是:
newNoteText: ko.observable().extend({
required: {
onlyIf: function(){
return someFlagIsTrue;
}
}
参照。这是对您之前的一个问题的回答(由 Knockout Validation 的主要贡献者 Eric Barnard 提供)。
关于您的代码,除了 Knockout Validation 的语法之外,还有两件事需要担心:
return something == true
与return something
(不提及 JavaScript 的处理方式==
和运算符,请在此处===
查看更多信息)相同。
在您的函数中, 的值this
并不是您认为的那样(这里它指的是括号之间的参数extend()
)。
如果您想访问视图模型的其他可观察对象之一的值,您应该执行以下操作:
newNoteText: ko.observable().extend({
required: {
onlyIf: function(){
return self.ShowNote();
}
}
self 在视图模型构造函数的顶部定义,例如var self = this;
. 在此处查看有关此模式的更多信息。
不需要 ThibWeb 提到的 params 选项 - knockout.validation.js 在 addExtender 方法中将其默认设置为 true:
if (params.message || params.onlyIf) {
return ko.validation.addRule(observable, {
rule: ruleName,
message: params.message,
params: utils.isEmptyVal(params.params) ? true : params.params,
condition: params.onlyIf
});
Eric Barnard 的答案是在 2011 年,大概在这被默认为 true 之前。
但是,如果您的代码设置了任何验证默认值,您可能会将 HTML5 必需属性写入 HTML,或者读取 HTML 中设置的属性:
ko.validation.configure({
parseInputAttributes: true, //default is false
writeInputAttributes: true //default is false
});
我发现这会导致 onlyIf required 条件被有效忽略,因为您要添加始终应用的额外必需规则。