ฉันต้องการเริ่มเล่นซอกับ ClojureScript แต่ฉันสับสนเกี่ยวกับบางจุด ปัญหาของฉันคือวิธีที่ดีในการจัดการกับการเปลี่ยนแปลงสถานะที่มาจากการโต้ตอบของผู้ใช้เมื่อคุณพยายามทำงานตามหน้าที่
ขอยกตัวอย่างสักสองสามข้อ ฉันมีแอปพลิเคชันในใจที่ทำงานในเบราว์เซอร์ แต่ฉันคิดว่าปัญหานี้เป็นเรื่องทั่วไปมากกว่า แน่นอนว่าบางสิ่งจะเปลี่ยนไป - DOM เป็นอย่างน้อย แต่ฉันต้องการค้นหาวิธีจัดระเบียบรหัสที่เหลือเพื่อทำงานกับโครงสร้างข้อมูลที่เปลี่ยนแปลงไม่ได้
1) ว่าฉันต้องการแนบกิจกรรมบางอย่างกับวัตถุ DOM บางอย่าง นี่ไม่ใช่เรื่องยากที่จะทำในลักษณะที่ใช้งานได้เป็นส่วนใหญ่: เมื่อคุณสร้างโหนดคุณจะแนบแผนที่แฮชกับตัวจัดการเหตุการณ์ต่าง ๆ แต่ให้พิจารณากรณีที่คุณใช้การมอบหมายกิจกรรม จากนั้นเมื่อคุณสร้างโหนดใหม่คุณอาจแนบตัวจัดการเหตุการณ์กับโหนดพาเรนต์ที่อาจมีอยู่แล้ว ดังนั้นคุณจะต้องเปลี่ยนแฮชที่เกี่ยวข้องกับโหนดที่มีอยู่แล้ว
2) สมมติว่าฉันกำลังออกแบบโมดูลเติมข้อความอัตโนมัติสำหรับฟิลด์อินพุต ทุกครั้งที่ผู้ใช้กดปุ่มฉันสามารถโทรหาเซิร์ฟเวอร์เพื่อรับคำแนะนำ มันง่ายมาก แต่ตอนนี้สมมติว่าฉันต้องการปรับให้เหมาะสมเล็กน้อย ถ้าฉันรู้ว่าผลที่ตรงกันทั้งหมดfoo
มีจุดในการถามอีกครั้งเพื่อให้ได้ผลลัพธ์ที่ตรงกันทั้งหมดไม่มีfoobar
; ฉันสามารถกรองอดีต ดังนั้นฉันต้องสร้างแคชบางประเภท แคชนี้จะได้รับการอัปเดตทุกครั้งที่ผู้ใช้แทรกคำใหม่ซึ่งไม่ใช่คำที่ป้อนไว้ก่อนหน้านี้ อีกครั้ง: ฉันจะสร้างแบบจำลองแคชได้อย่างไร วิธีที่สมเหตุสมผลที่สุดดูเหมือนจะเป็นคำการแมปแฮชกับผลลัพธ์ แต่ควรจะไม่แน่นอน
คุณสามารถแนะนำรูปแบบบางอย่างที่จะทำให้ง่ายต่อการรวมการเปลี่ยนแปลงเนื่องจากการโต้ตอบกับผู้ใช้ในการออกแบบการทำงาน