Я пытаюсь проверить, является ли почтовый индекс, введенный в поле формы, действительным для состояния, выбранного из раскрывающегося списка в предыдущем поле. У меня есть все данные в таблице и я могу подтвердить использование вызова ajax. Мой код ниже позволяет мне сделать ajax-вызов возвратом true/false, но я не уверен, как вызвать проверку, основанную на возвращаемом значении. У кого-нибудь есть идея?Нокаут пользовательская проверка ajax issue
Пользовательские проверки:
ko.validation.rules["isValidZipCode"] =
{
getValue: function (o) {
return (typeof o === 'function' ? o() : o);
},
validator: function (val, fields) {
var self = this;
var anyOne = ko.utils.arrayFirst(fields, function (field) {
var val = self.getValue(field);
if (val === undefined || val === null)
return "";
return true;
});
var ajaxData = { state: anyOne, zipCode: val }
$.ajax({
url: $("a#ValidateZipByState").attr("href"),
type: "POST",
data: ajaxData,
success: function (isValid) {
if (isValid) {
return true;
} else {
return false;
}
},
error: handleSubmitError
});
return;
},
message: "Invalid zip code for this state"
};
ViewModel:
self.State = ko.observable(model.State).extend({ required: true });
self.ZipCode = ko.observable(model.ZipCode).extend({ required: true, pattern: /^[0-9]{5}(?:-[0-9]{4})?$/g, isValidZipCode: [self.State, self.ZipCode] });
Джейсон на помощь снова! Большое спасибо. Я сидел на этом весь день и не мог понять. Я просто прочитал документацию. Если вы не возражаете, можете ли вы объяснить, что такое асинхронное поведение: true и callback делают под капотом? Похоже, что для меня есть кое-что KO :) –
Это все-колдовство, насколько я знаю. нокаут-валидация - с открытым исходным кодом, поэтому, если вам действительно интересно, вы можете посмотреть их исходный код, но я сам не смотрел на этот камень. –
Ну, в любом случае, спасибо вам большое! –