Kullanıcının birden çok kez gerçekleştirebileceği bir web sayfasında işlevsellik oluşturuyorum. Kullanıcının eylemi aracılığıyla bir nesne / model oluşturulur ve ko.applyBindings () kullanılarak HTML'ye uygulanır.
Veriye bağlı HTML, jQuery şablonları aracılığıyla oluşturulur.
Çok uzak çok iyi.
İkinci bir nesne / model oluşturarak bu adımı tekrarladığımda ve ko.applyBindings () 'i çağırdığımda iki sorunla karşılaşıyorum:
- İşaretleme, önceki nesneyi / modeli ve yeni nesneyi / modeli gösterir.
- Nesne / modeldeki özelliklerden biriyle ilgili bir javascript hatası oluşur, ancak yine de biçimlendirmede işlenir.
Bu sorunu aşmak için, ilk geçişten sonra jQuery'nin .empty () yöntemini çağırarak tüm veri bağlama özniteliklerini içeren şablonlu HTML'yi kaldırıyorum, böylece artık DOM'da kalmasın. Kullanıcı ikinci geçiş için işlemi başlattığında, veriye bağlı HTML DOM'a yeniden eklenir.
Ancak dediğim gibi, HTML DOM'a yeniden eklendiğinde ve yeni nesneye / modele yeniden bağlandığında, yine de ilk nesneden / modelden veri içeriyor ve yine de oluşmayan JS hatasını alıyorum ilk geçiş sırasında.
Sonuç olarak, işaretleme DOM'den kaldırılmış olsa bile, Altını Gizleme'nin bu bağlı özellikleri elinde tuttuğu görülmektedir.
Yani aradığım şey, bu bağlı özellikleri Knockout'tan kaldırmanın bir yolu; nakavt artık gözlemlenebilir bir model olmadığını söylemek. Bunu yapmanın bir yolu var mı?
DÜZENLE
Temel süreç, kullanıcının bir dosya yüklemesidir; sunucu daha sonra bir JSON nesnesiyle yanıt verir, veriye bağlı HTML DOM'a eklenir, ardından JSON nesne modeli bu HTML'ye bağlanır.
mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
Kullanıcı model üzerinde bazı seçimler yaptıktan sonra, aynı nesne sunucuya geri gönderilir, veriye bağlı HTML daha sonra DOM'dan kaldırılır ve ardından aşağıdaki JS'ye sahip olurum
mn.AccountCreationModel = null;
Kullanıcı bunu bir kez daha yapmak istediğinde tüm bu adımlar tekrarlanır.
Korkarım kod bir jsFiddle demosu yapmak için fazla "karmaşık".
initUygulanacak verileri ilettiğiniz bir işlevi neden ifşa etmiyorsunuz ?