Este exemplo de knockout js funciona assim, quando você edita um campo e pressiona TAB, os dados do modelo de exibição e, portanto, o texto abaixo dos campos são atualizados.
Como posso alterar esse código para que os dados do modelo de exibição sejam atualizados a cada pressionamento de tecla?
<!doctype html>
<html>
<title>knockout js</title>
<head>
<script type="text/javascript" src="js/knockout-1.1.1.debug.js"></script>
<script type="text/javascript">
window.onload= function() {
var viewModel = {
firstName : ko.observable("Jim"),
lastName : ko.observable("Smith")
};
viewModel.fullName = ko.dependentObservable(function () {
return viewModel.firstName() + " " + viewModel.lastName();
});
ko.applyBindings(viewModel);
}
</script>
</head>
<body>
<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>
<h2>Hello, <span data-bind="text: fullName"> </span>!</h2>
</body>
</html>
javascript
knockout.js
Edward Tanguay
fonte
fonte
Respostas:
A partir da documentação
fonte
afterkeydown
é uma má solução.Na versão 3.2, você pode simplesmente usar a ligação de entrada de texto. :
Faz duas coisas importantes:
Portanto, não há necessidade de módulos adicionais, controles personalizados e outras coisas.
fonte
Se você quiser fazer atualizações em
afterkeydown
"por padrão", poderá injetar avalueUpdate
ligação novalue
manipulador de ligações. Basta fornecer um novoallBindingsAccessor
para o manipulador usar, que incluiafterkeydown
.Se você não estiver confortável em "substituir" a
value
ligação, poderá atribuir um nome diferente à ligação personalizada de substituição e usar esse manipulador de ligação.demonstração
Uma solução como essa seria adequada para o Knockout versão 2.x. A equipe do Knockout aprimorou uma ligação mais completa para entradas do tipo texto através da ligação textInput no Knockout versão 3 e posterior. Foi projetado para lidar com todos os métodos de entrada de texto para entradas e
textarea
. Ele ainda manipula a atualização em tempo real, que efetivamente torna essa abordagem obsoleta.fonte
A resposta de Jeff Mercado é fantástica, mas infelizmente quebrou com o Knockout 3.
Mas eu encontrei a resposta sugerida pelos ko devs enquanto trabalhava nas mudanças do Knockout 3. Veja os comentários inferiores em https://github.com/knockout/knockout/pull/932 . O código deles:
http://jsfiddle.net/mbest/GKJnt/
O Edit Ko 3.2.0 agora possui uma solução mais completa com a nova ligação "textInput". Veja a resposta de SalvidorDali
fonte