Я использую ko.validation для проверки достоверности данных на моей странице следующим образом:
var postcode = ko.observable(),
name = ko.observable();
var validationModel = ko.validatedObservable({
postcode: postcode.extend({ required: true }),
name: name.extend({ required: true })
});
Затем в моей кнопке OK я проверяю проверку перед отправкой:
var buttonOk = function () {
if (!validationModel.isValid()) {
validationModel.errors.showAllMessages();
return false;
}
...
Это работает очень хорошо: если пользователь не набирает что-то для почтового индекса и имени, проверка не удалась.
Теперь я добавил еще несколько правил проверки:
почтовый индексMustNotAlreadyExists + наименованиеMustNotAlreadyExists вот так:
var validationModel = ko.validatedObservable({
postcode: postcode.extend({ required: true }),
name: name.extend({ required: true })
}).extend({
postcodeMustNotAlreadyExists: cities,
denominationMustNotAlreadyExists: cities
});
ko.validation.rules['postcodeMustNotAlreadyExists'] = {
validator: function (val, cities) {
// Try to find a match between the typed postcode and the postcode in the list of cities
var match = ko.utils.arrayFirst(cities(), function (item) {
return (val.postcode() === item.postCode());
});
return !match;
},
message: 'This postcode already exists!'
};
ko.validation.rules['denominationMustNotAlreadyExists'] = {
validator: function (val, cities) {
// Try to find a match between the typed denomination and the denomination in the list of cities
var match = ko.utils.arrayFirst(cities(), function (item) {
return (val.name() === item.name());
});
return !match;
},
message: 'This denomination already exists!'
};
ko.validation.registerExtenders();
Теперь validationModel.isValid()
всегда возвращает true, когда пользователь ничего не вводит для почтового индекса или имени. И я заметил, что validationModel().postcode.isValid()
является ложным, поэтому нелогично устанавливать для validationModel.isValid() значение True.
Теперь с моей новой реализацией я должен проверить две вещи: (!validationModel.isValid() || validationModel().errors().length>0)
Есть идеи?
Спасибо.