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.