knockoutjs knockout data computed applybindings knockout.js

knockout.js - data - knockoutjs variables



knockout.js Observable calculado llamado dos veces en Internet Explorer (2)

El enlace de value tiene una sección especial para tratar el autocompletado en Internet Explorer. Esto a menudo causará dos escrituras. Puede desactivarlo si no le importa autocompletar agregando un atributo a la input :

<input data-bind="value:myTest" type="text" style="width:150px;" autocomplete="off" />

Por favor vea el ejemplo simple a continuación; un cuadro de texto que está vinculado a un observable calculado. Mi problema es que IE llama al método de escritura dos veces cuando se actualiza el cuadro de texto. Firefox y otros navegadores no parecen tener este problema. He observado este problema en IE 7 y 8.

Antes que nada, ¿estoy haciendo algo mal? De no ser así, ¿cuál es el enfoque recomendado para enfrentarlo?

<script> var viewModel = { myTestVar: "aaa" }; viewModel.myTest = ko.computed({ read: function () { return viewModel.myTestVar; }, write: function (value) { alert(value); viewModel.myTestVar = value; }, owner: viewModel }); $(document).ready(function () { ko.applyBindings(viewModel); }); </script> </head> <body> <input data-bind="value:myTest",type="text" style="width:150px;" /> </body>


Prueba esto:

write: function (value) { if(value != viewModel.myTestVar) { alert(value); viewModel.myTestVar = value; } }

Como viewModel.myTestVar no es observable, no tengo una buena idea de por qué se llama la escritura dos veces, pero la comprobación debe evitar la escritura múltiple real.