Проверка нокаута - Как проверять наблюдаемые только после сохранения всей модели
Я использую Knockout Validation, и я действительно изо всех сил пытаюсь заставить поля в моей форме проверять только после того, как я вызову save для всей модели. В тот момент, когда пользователь проходит через форму, если он вводит недопустимое значение, ошибка сразу же появляется при размытии.
Мне бы хотелось, чтобы он отображался только после того, как я нажал кнопку "Сохранить", а затем заново оценил каждое поле, когда пользователь вносит изменения после этого.
Ниже приведена уменьшенная версия моей модели.
var model = ko.validatedObservable({
sellingPrice: ko.observable().extend({
min:0
})
});
function Save(){
if(!model.isValid()){
if (model.errors().length > 0) {
model.errors.showAllMessages(true);
}
return false;
} else {
//save the model
}
}
Есть ли где-нибудь флаг, который я должен установить, чтобы отложить проверку, пока вся модель не будет проверена в моем методе сохранения?
2 ответа
Вы можете попробовать использовать группу проверки:
Посмотрите на эту скрипку, которую я написал, я не тестировал ее, но она должна дать вам представление о том, как она работает.
https://jsfiddle.net/xggu9Lv2/47/
var ViewModel = function() {
var self = this;
// Declare
self.sellingPrice = ko.observable(null);
self.otherThing = ko.observable(null);
self.anotherThing = ko.observable(null);
self.Validator = ko.observable(null);
// Set validation rules
self.setValidation();
self.setValidation = function() {
self.sellingPrice.extend({
min: 0
})
self.otherThing.extend({
required: true
})
self.anotherThing.extend({
required: true
})
//Validation group
self.FieldValidator = ko.validation.group({
sellingPrice: self.sellingPrice,
otherThing: self.otherThing,
anotherThing: self.anotherThin
});
}
self.save = function() {
// Check the length of the validation group
if (!this.Validator().length) {
// All is OK!
}
}
};
ko.applyBindings(new ViewModel());
Мне нужно взглянуть на ваш код, чтобы увидеть, как используется проверка, но, просматривая документы, я думаю, что все, что вам нужно сделать, - это более внимательно посмотреть, как вы отображаете ошибки проверки.
Вы должны быть в состоянии обернуть div, который включает в себя ваши ошибки, с видимостью или скрытой привязкой, которая связана с какой-то другой наблюдаемой, которую вы явно устанавливаете, когда находитесь в методе сохранения, и проверка не проходит.
Другой вариант - создать собственный объект проверки, который предоставляет свои собственные наблюдаемые ошибки, с которыми вы связываетесь. Мы делаем это там, где я работаю - комментируйте, если вам интересно посмотреть, как это структурировано, и я могу предоставить краткий обзор, но я считаю его немного громоздким, и это отступление от проверки КО.