El motivo por el que su controlador de clics nunca se activa es porque nunca se aplicó a su elemento. Así que cuando usted hace esto en jQuery:
$('.some-class').on('some-event', someFunction);
Entonces para el manejador de estar vinculado a ese evento, primero jQuery tiene que encontrar su selector de $('.some-class')
. En su caso, lo más probable es que #btnParse
aún no se represente en la página por nocaut cuando vincula el evento. O, también es posible, que el elemento original se represente, destruya y luego se represente otro elemento. En este segundo escenario, el controlador de eventos no permanecería en el botón.Una alternativa (que no recomiendo) es enlazar el controlador más arriba en el DOM, como a nivel document
, y los eventos de filtro a sólo aquellos de algo con un id #btnParse
:
$(document).on('click', '#btnParse', function() { console.log('hi'); });
La razón por la que No lo recomiendo porque es una mala práctica, debería usar el enlace click
como se sugirió en otras publicaciones. Además, está utilizando un atributo de id. Y, en general, eso no es una buena idea para el contenido dinámico con plantilla: solo use clases a menos que necesite absolutamente una identificación para un elemento estático único.
En cuanto a cómo utilizar correctamente el enlace de clic, lo difícil es que tendrá que entender cómo funciona el efecto directo. Si, por ejemplo, estás vinculante un clic dentro de un bucle, y desea que el controlador de su modelo principal punto de vista, hay que hacer referencia al ámbito padre porque el bucle cambia su contexto:
<!-- ko foreach: someCollection -->
<a data-bind="click: $parent.someFunction"></a>
<!-- /ko -->
Por otra parte, si es necesario cambiar el contexto de Javascript que su controlador ejecuta con (el this
), entonces usted necesita para enlazar el controlador de clic como esto:
<!-- ko foreach: someCollection -->
<a data-bind="click: $parent.someFunction.bind($parent)"></a>
<!-- /ko -->
Juega con esas cosas un poco y hacer una nueva pregunta si estás sigo confundido. ¡Buena suerte!
¿Por qué no agregar la función de hacer clic a través de los knockouts click binding? – Tyrsius
Sí, puedo, y de hecho funciona. Sin embargo, creo que el uso de enlace de datos debe reservarse para algo que está realmente relacionado con el modelo de vista. Si quiero manipular elementos en mi página aún más, no debería confiar en knockout para hacerlo. También me molesta que una configuración simple ya que esto no funciona cuando debería. –
Bueno, la nota que está señalando es para las funciones de clic de enlace de datos, no está hablando de clics de jquery. – Tyrsius