ฉันกำลังสร้างฟังก์ชันการทำงานบนหน้าเว็บซึ่งผู้ใช้สามารถดำเนินการได้หลายครั้ง ผ่านการกระทำของผู้ใช้อ็อบเจ็กต์ / โมเดลถูกสร้างขึ้นและนำไปใช้กับ HTML โดยใช้ ko.applyBindings ()
HTML ที่ผูกข้อมูลถูกสร้างขึ้นผ่านเทมเพลต jQuery
จนถึงตอนนี้ดีมาก
เมื่อฉันทำขั้นตอนนี้ซ้ำโดยสร้างวัตถุ / โมเดลที่สองและโทรหา ko.applyBindings () ฉันพบปัญหาสองประการ:
- มาร์กอัปจะแสดงวัตถุ / โมเดลก่อนหน้าตลอดจนวัตถุ / โมเดลใหม่
- ข้อผิดพลาดของจาวาสคริปต์เกิดขึ้นที่เกี่ยวข้องกับคุณสมบัติอย่างใดอย่างหนึ่งในวัตถุ / โมเดลแม้ว่าจะยังแสดงผลในมาร์กอัป
เพื่อแก้ไขปัญหานี้หลังจากผ่านครั้งแรกฉันเรียก jQuery ของ. empty () เพื่อลบ HTML ที่มีเทมเพลตซึ่งมีแอตทริบิวต์การผูกข้อมูลทั้งหมดเพื่อไม่ให้อยู่ใน DOM อีกต่อไป เมื่อผู้ใช้เริ่มกระบวนการสำหรับการส่งครั้งที่สอง HTML ที่ผูกข้อมูลจะถูกเพิ่มเข้าไปใน DOM อีกครั้ง
แต่อย่างที่ฉันพูดไปเมื่อ HTML ถูกเพิ่มเข้าไปใน DOM อีกครั้งและเชื่อมโยงกับอ็อบเจ็กต์ / โมเดลใหม่มันยังคงรวมข้อมูลจากอ็อบเจ็กต์ / โมเดลแรกและฉันยังคงได้รับข้อผิดพลาด JS ซึ่งไม่เกิดขึ้น ในช่วงแรก
ข้อสรุปดูเหมือนว่า Knockout ยึดคุณสมบัติที่ถูกผูกไว้เหล่านี้แม้ว่ามาร์กอัปจะถูกลบออกจาก DOM
ดังนั้นสิ่งที่ฉันกำลังมองหาคือวิธีการลบคุณสมบัติที่ถูกผูกไว้เหล่านี้ออกจาก Knockout บอกสิ่งที่น่าพิศวงว่าไม่มีโมเดลที่สังเกตได้อีกต่อไป มีวิธีทำไหม?
แก้ไข
กระบวนการพื้นฐานคือผู้ใช้อัปโหลดไฟล์ จากนั้นเซิร์ฟเวอร์ตอบสนองด้วยออบเจ็กต์ JSON HTML ที่ผูกข้อมูลจะถูกเพิ่มไปยัง DOM จากนั้นโมเดลอ็อบเจ็กต์ JSON จะถูกผูกไว้กับ HTML นี้โดยใช้
mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
เมื่อผู้ใช้ทำการเลือกบางอย่างในโมเดลวัตถุเดียวกันจะถูกโพสต์กลับไปที่เซิร์ฟเวอร์ HTML ที่ผูกข้อมูลจะถูกลบออกจาก DOM จากนั้นฉันก็มี JS ต่อไปนี้
mn.AccountCreationModel = null;
เมื่อผู้ใช้ต้องการทำอีกครั้งขั้นตอนเหล่านี้จะทำซ้ำ
ฉันกลัวว่าโค้ดจะ 'เกี่ยวข้อง' เกินไปที่จะทำการสาธิต jsFiddle
init
ฟังก์ชันที่คุณส่งผ่านข้อมูลไปใช้?