Validando vínculos personalizados com ko.validation

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.