2012-03-27 6 views
47

Últimamente he estado haciendo muchos knockoutjs, y me encontré con una extraña ocurrencia.knockoutjs - enlaces con parámetros activados en la carga

Como puede ver en este violín http://jsfiddle.net/hqXjv/ cuando configura un enlace a click: testMethod, la acción se dispara cuando se hace clic en el botón.

Como se puede ver en este violín http://jsfiddle.net/kxTzM/ cuando se configura la unión a click: testMethod('hi') los incendios de acción, tanto cuando se hace clic en el botón y al cargar la página (supongo que en applyBindings)

Tener un parámetro no se Es necesario reproducir el problema, si cambia el enlace a click: testMethod() en el primer violín, verá que se desencadena en la carga de la página.

Si bien, sí, podría agregar otro atributo al elemento e intentar usarlo como parámetro, mi pregunta es, ¿hay alguna manera de pasar los parámetros a los enlaces knockoutjs sin activarlos onload. Si esto es un error, que así sea, sin embargo, solo quiero saber una forma de evitarlo.

Respuesta

77

creo "Nota 2" en esta página nocaut explica todo:

http://knockoutjs.com/documentation/click-binding.html

puede evitar el problema ya sea usando:

funciones

anónimos:

<button data-bind="click: function(data, event) { myFunction(data, event, 'param1', 'param2') }">Click me</button> 

... or ...

El método de enlace:

<button data-bind="click: myFunction.bind($data, 'param1', 'param2')">Click me</button> 
+7

Gracias por la sugerencia, pero no hay ninguna explicación de por qué el evento click se activa en la carga ... –

+0

http://stackoverflow.com/a/33396363/1058292 – orangesherbert

3

me encontré con esto en las siguientes circunstancias:

  • estaba corriendo Visual Studio 2013.
  • Mi proyecto nocaut utilizaba mecanografiado 1.5.
  • Estaba ejecutando mi proyecto en Chrome utilizando el depurador de Visual Studio.
  • Refactoreé un poco el código y olvidé recompilar o volver a ejecutar el depurador.

Debido a esto, creo que lo que sucedió fue que tenía un tipo de letra defectuoso que no compilaba, solo que no recibía advertencias o errores, y las ediciones que hice en TypeScript no recibían reflejado correctamente en los archivos JavaScript autogenerados.

Puede ser poco común que otros vean esto, pero supongo que una palabra de advertencia es que podría encontrarse con este u otro comportamiento inesperado si está editando TypeScript en su lugar mientras ejecuta el depurador VS. Sospecho que había creado la situación que Mark Robinson describió en mis archivos js autogenerados, pero no lo vi en mi TypeScript.

12

Los siguientes ejecuta la función de clic en la carga

click: clickSpan() 

la eliminación de los soportes de como a continuación, la función no se ha ejecutado onload

click: clickSpan 

(esto se explica en la nota 2 anterior pero estaba en forma críptica :-)

Cuestiones relacionadas