Sto creando funzionalità su una pagina web che l'utente può eseguire più volte. Attraverso l'azione dell'utente, un oggetto / modello viene creato e applicato all'HTML utilizzando ko.applyBindings ().
L'HTML associato ai dati viene creato tramite modelli jQuery.
Fin qui tutto bene.
Quando ripeto questo passaggio creando un secondo oggetto / modello e chiamo ko.applyBindings () incontro due problemi:
- Il markup mostra l'oggetto / modello precedente così come il nuovo oggetto / modello.
- Si verifica un errore javascript relativo a una delle proprietà nell'oggetto / modello, sebbene sia ancora visualizzato nel markup.
Per aggirare questo problema, dopo il primo passaggio chiamo .empty () di jQuery per rimuovere l'HTML basato su modelli che contiene tutti gli attributi di data-bind, in modo che non sia più nel DOM. Quando l'utente avvia il processo per il secondo passaggio, l'HTML associato ai dati viene nuovamente aggiunto al DOM.
Ma come ho detto, quando l'HTML viene aggiunto di nuovo al DOM e ricollegato al nuovo oggetto / modello, include ancora i dati dal primo oggetto / modello e ricevo ancora l'errore JS che non si verifica durante il primo passaggio.
La conclusione sembra essere che Knockout mantiene queste proprietà associate, anche se il markup viene rimosso dal DOM.
Quindi quello che sto cercando è un mezzo per rimuovere queste proprietà associate da Knockout; dicendo a knockout che non esiste più un modello osservabile. C'è un modo per fare questo?
MODIFICARE
Il processo di base è che l'utente carica un file; il server risponde quindi con un oggetto JSON, l'HTML associato ai dati viene aggiunto al DOM, quindi il modello di oggetti JSON viene associato a questo HTML utilizzando
mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
Una volta che l'utente ha effettuato alcune selezioni sul modello, lo stesso oggetto viene postato di nuovo sul server, l'HTML associato ai dati viene rimosso da allora DOM, e quindi ho il seguente JS
mn.AccountCreationModel = null;
Quando l'utente desidera farlo ancora una volta, tutti questi passaggi vengono ripetuti.
Temo che il codice sia troppo "coinvolto" per fare una demo jsFiddle.
init
funzione in cui si passano i dati da applicare?