ビューモデルを検証するために、ノックアウトjs検証プラグインとともにノックアウトjsを使用しています。ここに私のJavaScriptコードがあります
// enable validation
ko.validation.init();
// View model
function AppViewModel() {
this.Canceled = ko.observable(false);
this.Name = ko.observable("").extend({
//custom validation
validation: {
validator: function (val, params) {
//alert to show when validation is triggered
alert("validation function was called");
//change validation rule depending on whether cancel button was clicked
if(params.Canceled == true)
return true;
else
return false;
},
message: 'This field is required',
params: {Canceled:this.Canceled()}
}
});
this.errors = ko.validation.group(this);
//function triggered on submit which checks for validation
this.submit = function() {
if(this.errors().length != 0)
this.errors.showAllMessages();
else
alert("no errors detected");
};
//function to cancel validation rules
this.cancelValidation = function() {
this.Canceled(true);
};
}
// Activate knockout.js
ko.applyBindings(new AppViewModel());
ここに私のHTMLがあります
Name: <input type="text" data-bind="value: Name"/><br/><br/>
<button data-bind="click: submit">submit</button> <button data-bind="click: cancelValidation">Cancel validation</button>
私がやろうとしているのは、「検証のキャンセル」ボタンがクリックされた場合に、実行時に検証ルールを変更することです。これを行うために、「Canceled」と呼ばれる ko.observable 変数と共にカスタム検証関数を使用しています。「キャンセル」の値に応じて、バリデーター関数は true または false を返します。私が抱えている問題は、ページの読み込み時に検証機能が 1 回しか実行されないことです。「キャンセル」の値が変更された場合、関数は再実行されません。これは正常な動作ですか?「キャンセル」の値を変更したときに、現在のモデルの検証機能を再実行する方法はありますか?
ここにコードを試すためのフィドルがあります。ページの読み込み時に一度だけ実行されることを示すために、検証関数内にアラートを追加しました。