У меня возникли проблемы с настройкой настраиваемого правила проверки с помощью knockout.js для проверки того, существует ли имя пользователя. По моему мнению, если возвращение истинно, то ошибок нет, иначе будет установлена ошибка.Пользовательское правило проверки с knockout.js
Here's пример пользовательской проверки
//val is the username in question and searchType is the type of search(username or email)
function checkValue(val, searchType){
if(searchType == 'userName'){
$.post("https://stackoverflow.com/users/check_if_exists",{ 'type':'username', 'value': val },function(data) {
var info = JSON.parse(data);
if(info.username_availability == "available"){
return searchType;
//I know this is working because I've alerted the searchtype here and it displays properly
}
else{
return "unavailable";
}
});
}
}
ko.validation.rules['checkIfExists'] = {
validator: function (val, searchType) {
return searchType == checkValue(val, searchType); //if the username is availble, the searchType is returned back so it would return searchType == searchType which should be true meaning there are no errors
},
message: 'This username is taken, please select another.'
};
ko.validation.registerExtenders();
Я проверил вкладку сети и POST возвращает правильное значение. Если значение доступно, я возвращаю searchType. Таким образом, он сравнивает searchType == searchType, который должен быть правдой. Однако это не так.
Есть ли другой способ выполнить то, что я пытаюсь сделать?
обновление
Вот что у меня есть, как сейчас
function checkValue(val, searchType, callback) {
var callback = function(data) {
return true;
}
$.post("https://stackoverflow.com/users/check_if_exists", { 'type':'username', 'value': val }, function(data) {
info = JSON.parse(data);
if(info.username_availability == "available"){
callback(true);
} else {
callback(false);
}
});
}
ko.validation.rules['checkIfExists'] = {
async: true,
validator: function (val, searchType) {
alert(checkValue(val, searchType));//returns undefined
return checkValue(val, searchType);
},
message: 'This username is taken, please select another.'
};
ko.validation.registerExtenders();
Спасибо, заработал! Вы многое прояснили для меня, я очень ценю это. – user1443519