Soy nuevo en knockout.js: me he hecho cargo de una aplicación existente escrita en él, los mantenedores anteriores se han ido, y quiero comenzar escribiendo pruebas que ejerzan todo desde fuera. La mayoría de las páginas son bastante sencillas, pero me he encontrado con esto:
<textarea maxlength="4000" data-bind="valueWithPlaceholder: answerValue, placeholder: exampleText, maxLengthCountdown: answerValue"></textarea>esto está dentro de un con, dentro de bucles dentro de otro con, etc., y no tengo ningún interés real en descifrar todo el esquema en este punto, solo quiero configurarlo en algo con javascript.
¿Alguna idea de cómo lo configuro? Quiero alguna forma que no esté ligada a la comprensión del esquema, porque tengo un montón de estos para configurar, y quiero construir alguna función a lo largo de las líneas de "set_text_area (elemento, valor)". Realmente estoy buscando algo como:
element.value = "blah" knockout.force_update_binding( element ); // I'm imagining this existsNota: lo que estoy preguntando es cómo establecer un valor mediante programación a partir de un elemento y sin saber nada sobre el modelo subyacente. Obviamente, si conozco el modelo, simplemente lo configuro, pero solo estoy haciendo clic en un elemento en mi arnés de prueba y quiero escribir un valor, y mi arnés de prueba no puede ir y "entender" cosas.
Esto es un poco antipatrón, pero me da la impresión de tu pregunta que solo quieres hacer el trabajo...
Si sabe qué propiedad establecer, puede usar ko.dataFor para obtener el modelo de vista que pertenece al nodo.
ko.applyBindings({ myValue: ko.observable("Initial value") }); ko.dataFor(document.querySelector("input")) // Get the viewmodel .myValue("New value"); // Set a new value <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> <input data-bind="value: myValue">También puede solicitar la eliminación de todos los enlaces aplicados a un nodo:
ko.applyBindings({ myValue: ko.observable("Initial value") }); // Get your node const myNode = document.querySelector("input"); // Get the bindings const bindings = ko .bindingProvider .instance .getBindings( myNode, ko.contextFor(myNode) ) // Get the observable that is used in the 'value' binding const boundValue = bindings.value; // Set a new value boundValue("New value"); <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> <input data-bind="value: myValue">Nota: los enlaces que ha mostrado en su plantilla no son enlaces de eliminación predeterminados. Entonces, si los ejemplos anteriores no funcionan, es posible que deba compartir sus implementaciones con nosotros para que podamos ayudarlo.