List, selectedItems & Checkbox again #Adobe Flex

ทิ้งไว้นานมาก เพราะช่วงนี้มีเรื่องอื่นมากวนใจตลอดเวลาจนสมาธิในการเขียนโปรแกรมลดลงอย่างมาก (จริง ๆ เป็นคนที่จะทำงานได้ต้องอยู่เงียบ ๆ ด้วย ไม่งั้นจะคิดนู่นคิดนี่ต่อจากที่ได้ยิน เพราะงั้น ใครทำเสียงอะไรรบกวนจะรู้สึกหงุดหงิด และต้องหาหูฟังที่กันเสียงมาครอบไว้ แม้จะไม่ได้เปิดเพลงฟังซักเท่าไหร่ก็ตาม) กว่าจะรวบรวมความคิดและเขียนเป็นข้อ ๆ จนครบได้ก็ตอนนี้แหละ

จากเรื่อง Flex Event Propagation และทิ้งตัวอย่างไว้ว่าเขียน List กับ Checkbox ให้ทำงานร่วมกันใหม่โดยใช้การดัก Event เข้าช่วยมันเป็นยังไง แต่ถ้าเทียบกับอันก่อนหน้าที่ทำไว้นานมาแล้ว ด้วยจำนวนข้อมูลและความซับซ้อนของ Component อันน้อยนิด คงไม่ต่างกันมากนัก แต่ถ้าเป็น Component ที่กว่าจะวาดได้ มีลูกหลายชิ้นแล้วหละก็ ความแตกต่างอันน้อยนิดมีผลอย่างมากเลย

เวลาเลือก Item ที่มีอะไรแสดงว่าถูกเลือกอยู่นะ ถ้าเป็น Checkbox ธรรมดา เราสามารถกำหนด field ของข้อมูลไปได้ว่า จะให้เก็บสถานะการเลือกไว้ที่ field ไหน แต่พอเป็น List ที่มีข้อมูลหลายตัวแล้ว วิธีการเก็บมันต่างกันไป เพราะ List ไม่ได้เก็บสถานะว่าเลือกอะไรไว้เดี่ยว ๆ แต่เก็บเป็น ชุดเลย โดยมีขั้นตอนตั้งแต่กดเลือกคือ

  • Mouse down ถูก dispatch ออกจาก List
  • List จะเอา item ที่ถูกกดจาก Event และเพิ่มไปใน selected set พร้อมเพิ่ม selected count และตัวแปรที่เกี่ยวข้องต่าง ๆ
  • จากนั้น List จะสร้าง Change Event แล้ว Dispatch ออกไป โดนจะ Dispatch เมื่อไหร่ขึ้นอยู่กับการกำหนดให้ Drag Item ออกจาก List หรือป่าว
  • ถ้าไม่ให้ Drag item ออกจาก List. ChangeEvent จะถูก Dispatch ใน Mouse Down Handler
  • ถ้าให้ Drag item ออกจาก List. ChangeEvent จะถูก Dispatch ใน Mouse Up Handler ของ List

ที่สนใจแต่ Mouse Event เพราะว่า ถ้าให้ selectedItem จาก List ถูกกำหนดไปยัง Checkbox นั้นทำง่ายมาก สามารถดักเอาจาก Change event ได้เลย แต่ตรงข้าม หากต้องการกำหนดว่ากดที่ Checkbox แล้วมีผลต่อ selectedItems อันนี้ไม่สามารถแทรก item ที่ต้องการเข้าไปใน set ได้ง่าย ๆ เลย เพราะต้องคอย iterate เอา data ที่ได้จาก event ออกจาก selectedItems เดิม แล้ว set เข้า selectedItems ที่ต้องการเป็นชุดข้อมูลอีกที และยิ่งมีกรณีที่ซับซ้อนอย่าง ถ้ากดเลือกธรรมดาให้เลือก อันเดียว ถ้าเลือกโดยใช้ ctrl หรือ shift แล้วให้เลือกหลายอันได้หละก็ code จะแย่และอ่านลำบากเพราะจะเกิดหลายกรณีมาก

ตอนแรกกะว่าจะเขียนเรื่อง JS + Flash ต่อ แต่ตอนนี้ขี้เกียจหละ หายขี้เกียจแล้วคงมาเขียนอีกครั้ง แต่วันนี้ได้ทดลองอะไรหลายอย่าง ระหว่างสองอย่างนี้ แม้มันจะมีอะไรจุกจิก แต่พอทำให้มันทำงานร่วมกันได้แล้ว ทำให้เห็นอะไรที่เป็นไปได้อีกมากมายเลย แล้วจะพยายามไม่ขี้เกียจมาเล่าให้ฟัง :)

About llun

Just a programmer

, ,