forked from Knockout-Contrib/Knockout-Validation
-
Notifications
You must be signed in to change notification settings - Fork 32
Async Rules
homer2 edited this page Nov 13, 2012
·
6 revisions
####Async Rules are pretty handy for dealing with AJAX and other asynchronous validation operations####
Any validator
in a validation rule
can be async by setting the async flag on the rule:
ko.validation.rules['exampleAsync'] = {
async: true, // the flag that says "Hey I'm Async!"
validator: function (val, otherVal, callback) { // yes, you get a 'callback'
/* some logic here */
// hand my result back to the callback
callback( /* true or false */ );
// or if you want to specify a specific message
callback( /* { isValid: true, message: "Lorem Ipsum" } */ );
},
message: 'My default invalid message'
};
####Thus, here would be your classic jQuery AJAX validation rule:####
ko.validation.rules['remote'] = {
async: true,
validator: function ( val, parms, callback ) {
var defaults = {
url: '/my/rest/validation/uri',
type: 'POST',
success: callback
};
var options = $.extend( defaults, parms );
$.ajax( options );
},
message: 'Default Invalid Message'
};
After creation of the validation rule(s) you need to register them.
ko.validation.registerExtenders();
####Lastly, what do I do while validation is happening async?####
All validated observable objects now have an isValidating
property that is observable (so you can subscribe to it)
var username = ko.observable().extend({ remoteUserNameValidationRule: { url: '/Users/ValidateUserName', data: username }});
// setting it will trigger validation
username.isValidating.subscribe(function(isValid){
if(isValid){
// save the username or whatever you do
}
});