Saya membangun fungsionalitas ke halaman web yang dapat dilakukan pengguna beberapa kali. Melalui tindakan pengguna, objek / model dibuat dan diterapkan ke HTML menggunakan ko.applyBindings ().
HTML terikat data dibuat melalui template jQuery.
Sejauh ini baik.
Ketika saya mengulangi langkah ini dengan membuat objek / model kedua dan memanggil ko.applyBindings () saya mengalami dua masalah:
- Markup menunjukkan objek / model sebelumnya serta objek / model baru.
- Terjadi kesalahan javascript terkait dengan salah satu properti dalam objek / model, meskipun masih dirender dalam markup.
Untuk mengatasi masalah ini, setelah lulus pertama saya memanggil jQuery's .empty () untuk menghapus HTML template yang berisi semua atribut data-bind, sehingga tidak lagi di DOM. Saat pengguna memulai proses untuk umpan kedua, HTML yang terikat data ditambahkan kembali ke DOM.
Tapi seperti yang saya katakan, ketika HTML ditambahkan kembali ke DOM dan diikat ulang ke objek / model baru, itu masih menyertakan data dari objek / model pertama, dan saya masih mendapatkan kesalahan JS yang tidak terjadi selama lintasan pertama.
Kesimpulannya adalah bahwa Knockout mempertahankan properti terikat ini, meskipun markup dihapus dari DOM.
Jadi yang saya cari adalah cara untuk menghapus properti terikat ini dari Knockout; memberi tahu knockout bahwa tidak ada lagi model yang dapat diamati. Apakah ada cara untuk melakukan ini?
EDIT
Proses dasarnya adalah pengguna mengunggah file; server kemudian merespons dengan objek JSON, HTML terikat data ditambahkan ke DOM, kemudian model objek JSON terikat ke HTML ini menggunakan
mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
Setelah pengguna membuat beberapa pilihan pada model, objek yang sama dikirim kembali ke server, HTML yang terikat data dihapus dari DOM, dan saya kemudian memiliki JS berikut
mn.AccountCreationModel = null;
Ketika pengguna ingin melakukan ini sekali lagi, semua langkah ini diulangi.
Saya khawatir kodenya terlalu 'terlibat' untuk melakukan demo jsFiddle.
init
fungsi di mana Anda meneruskan data untuk diterapkan?