Knockout é uma biblioteca javascript que permite simplificar interfaces de usuário javacript dinâmicas aplicando o padrão MVVM. A alegria do knockout é que ele realmente facilita a criação de UIs dinâmicas, com uma sintaxe de vinculação simples e com a opção de adicionar novas vinculações personalizadas.
A validação Knockout é uma extensão de validação para Knockout que permite anexar regras de validação ao modelo de visualização.
O problema com a validação de knockout é que ela requer um pouco de trabalho para que funcione com ligações personalizadas. Por padrão, a validação de nocaute funciona apenas com as ligações de nocaute de “valor” e “verificada”, o que significa que há um pouco de trabalho envolvido em fazer com que as associações personalizadas funcionem com a validação de nocaute. Felizmente, a validação de nocaute expõe o “makeBindingHandlerValidatable” que faz exatamente o que diz na lata.
Para habilitar a validação em uma ligação de knockout customizada, primeiro a ligação precisa ser registrada com knockout e, em seguida, basta chamar “ko.validation.makeBindingHandlerValidatable (‘bindingName’)”.
Descobri que a maneira mais simples de lidar com isso é fazer algo como o seguinte:
function registerCustomBindingValidation() {
var args = Array.prototype.slice.call(arguments, 0);
for ( var i = 0; i < args.length; i++ ) {
ko.validation.makeBindingHandlerValidatable(args[i]);
}
}
Em seguida, tudo o que precisamos fazer é chamar o seguinte, uma vez que todas as ligações personalizadas tenham sido registradas com knockout:
registerCustomBindingValidation('customBinding1', 'customBinding2');
Isso nos permitirá usar regras de validação internas e personalizadas em nossa ligação personalizada.