Recientemente creé un controlador de enlace para incorporar el complemento JQuery Validation en un formulario utilizando la sintaxis de enlace de datos. Me encontré a mí mismo necesitando suministrar más de una información al manejador. Necesitaba proporcionar una bandera para aplicar la validación y una devolución de llamada para disparar una vez que se pasaba la validación.Controladores de enlace personalizado knockout: argumentos múltiples y devolución de funciones a la práctica recomendada.
Preguntas:
¿Cuál es la mejor práctica para el suministro de múltiples argumentos? Simplemente confié en la sintaxis de notación de objeto, pero también podría suministrar otro enlace y verificar que el enlace a través del parámetro "allBindings" pasara al manejador ...
¿Cuál es la mejor práctica para suministrar una función de devolución de llamada a un manejador? ?
A continuación se muestra el código JS definir el manejador y el código HTML para aplicar el manejador:
<form id="step1"
data-bind="jqValidation:{enforce: true,
submitHandler: doSomethingInVM}">
<fieldset data-bind="with:searchRequest">
//fields
</fieldset>
<button type="submit">submit</button>
</form>
ko.bindingHandlers.jqValidation = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var accessor = valueAccessor();
//need unwrapobservable??
if (accessor.enforce) {
$(element).find(':submit').removeClass('cancel');
$(element).validate({
submitHandler: function() {
if ($.isFunction(accessor.submitHandler))
accessor.submitHandler();
}
});
} else
$(element).find(':submit').addClass('cancel');
}
};
Gracias, ese fue mi pensamiento sobre el método allBindingsAccessor también. Entonces, en mi caso, ¿no pasarías el controlador en el atributo de enlace de datos? – drogon
Lo pasaría como parte del objeto que hace referencia a su máquina virtual exactamente como lo ha hecho. También puede escribir el controlador en línea, que es feo y se considera una mala práctica. – madcapnmckay
Ah, sí, estoy de acuerdo, soy culpable de algunos de los que están en mi primer proyecto de ko :) – drogon