やろうとすると問題が発生します:
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;
}
}
Cf. 以前の質問の1つに対するこの回答(KnockoutValidationの主な寄稿者であるEricBarnardによる)。
コードに関しては、Knockout Validationの構文とは別に、次の2つの点について心配する必要があります。
return something == true
と同じですreturn something
(JavaScriptの処理方法==
と===
演算子については触れていません。これについて詳しくは、こちらをご覧ください)。
関数では、の値はthis
あなたが思っているものではありません(ここでは、の括弧の間のパラメーターを参照していますextend()
)。
ビューモデルの他のオブザーバブルの1つの値にアクセスする場合は、次のようにする必要があります。
newNoteText: ko.observable().extend({
required: {
onlyIf: function(){
return self.ShowNote();
}
}
自己がビューモデルコンストラクターの上部で定義されている場合(のように)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 必須条件が事実上無視されることがわかりました。