Estoy construyendo funcionalidad en una página web que el usuario puede realizar varias veces. A través de la acción del usuario, se crea un objeto / modelo y se aplica a HTML usando ko.applyBindings ().
El HTML enlazado a datos se crea a través de plantillas jQuery.
Hasta aquí todo bien.
Cuando repito este paso creando un segundo objeto / modelo y llamo a ko.applyBindings () encuentro dos problemas:
- El marcado muestra el objeto / modelo anterior, así como el nuevo objeto / modelo.
- Se produce un error de javascript relacionado con una de las propiedades del objeto / modelo, aunque todavía se muestra en el marcado.
Para solucionar este problema, después de la primera pasada, llamo a .empty () de jQuery para eliminar la plantilla HTML que contiene todos los atributos de enlace de datos, de modo que ya no esté en el DOM. Cuando el usuario inicia el proceso para la segunda pasada, el HTML enlazado a datos se vuelve a agregar al DOM.
Pero como dije, cuando el HTML se vuelve a agregar al DOM y se vuelve a vincular al nuevo objeto / modelo, todavía incluye datos del primer objeto / modelo, y todavía obtengo el error JS que no ocurre durante la primera pasada.
La conclusión parece ser que Knockout se aferra a estas propiedades vinculadas, aunque el marcado se elimine del DOM.
Entonces, lo que estoy buscando es un medio para eliminar estas propiedades enlazadas de Knockout; decirle al nocaut que ya no hay un modelo observable. ¿Hay alguna forma de hacer esto?
EDITAR
El proceso básico es que el usuario carga un archivo; el servidor luego responde con un objeto JSON, el HTML enlazado a datos se agrega al DOM, luego el modelo de objeto JSON se enlaza a este HTML usando
mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
Una vez que el usuario ha realizado algunas selecciones en el modelo, el mismo objeto se vuelve a enviar al servidor, el HTML enlazado a datos se elimina del DOM, y luego tengo el siguiente JS
mn.AccountCreationModel = null;
Cuando el usuario desea hacer esto una vez más, se repiten todos estos pasos.
Me temo que el código está demasiado "complicado" para hacer una demostración de jsFiddle.
init
función en la que se le pasan los datos a aplicar?