knockout for data change knockout.js

knockout.js - for - knockout select value binding



knockoutjs-enlaces con parĂ¡metros activados en la carga (3)

He estado haciendo muchos knockoutjs últimamente, y me encontré con una extraña ocurrencia.

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

Como puede ver en este violín http://jsfiddle.net/kxTzM/ cuando configura el enlace para click: testMethod(''hi'') la acción se dispara tanto cuando se hace clic en el botón como cuando se carga la página (supongo applyBindings)

Tener un parámetro no es necesario para reproducir el problema, si cambia el enlace para 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 utilizarlo 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.


A continuación, se ejecutó la función de clic al cargar

click: clickSpan()

eliminando los corchetes como a continuación, la función no se ejecutó en la carga

click: clickSpan

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


Creo que la "Nota 2" en esta página eliminatoria lo explica todo:

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

Puede evitar el problema usando:

Funciones anónimas:

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

... o ...

El método de enlace:

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


Me encontré con esto en las siguientes circunstancias:

  • Estaba ejecutando Visual Studio 2013.
  • Mi proyecto knockout usaba TypeScript 1.5.
  • Estaba ejecutando mi proyecto en Chrome utilizando el depurador de Visual Studio.
  • Refactoricé 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 TypeScript malo que no compilaría, solo que no recibía advertencias o errores a ese efecto, y las ediciones que hice en TypeScript no se reflejaron correctamente en el auto- archivos JavaScript generados

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.