ใน Flex เวลาจะใช้ชิ้นส่วนอะไรก็ตามชิ้นส่วนเหล่านั้นส่วนใหญ่จะมาจาก UIComponent ทั้งนั้น คราวนี้ก่อนที่มันจะวาดชิ้นส่วนขึ้นมาเป็นภาพมันดันมีขั้นตอนต่างๆ ที่คล้ายๆ Applet ซะนี่ลองดูลำดับตามด้านล่างละกัน
- Constructor
- CreateChildren
- CommitProperty
- UpdateDisplayList
อาจจะมีมากกว่านี้แต่หลักๆ ที่จะเจอกันบ่อยๆ คือสี่ขั้นนี้แหละ เริ่มจาก Constructor ก่อนที่จะใช้กำหนดค่าเริ่มต้นต่างๆ ให้กับ Component อันนี้ก็ไม่ค่อยมีอะไร เพราะภาษาที่มีคลาสเกือบทุกภาษาก็คงมีเหมือนกัน
ตัวถัดมาคือ CreateChildren จะถูกเรียกครั้งเดียวตอนที่เริ่มสร้าง Component โดยมีหน้าที่หลักๆ ก็คือเอาชิ้นส่วนย่อยๆ มาประกอบล่างเป็นชิ้นใหญ่ๆ เช่นฟอร์มที่ใช้ส่งข้อมูลต่างๆ ก็จะมีพวก Label, TextField, … ซึ่งจะไม่มีการเปลี่ยนแปลงรูปร่างหรือขนาดอะไรอีก เอามาใส่ในขั้นนี้ให้หมด รวมถึงตอนกำหนด Event ต่างๆ ให้กับมันด้วย
CommitProperty เป็นขั้นที่เตรียมวาดขึ้นหน้าจอแล้ว จริงๆ มีขั้นก่อนหน้านี้เล็กๆ น้อยๆ พอสมควรพวก Measure… ทั้งหลายแหละ ที่เอาไว้บอกว่า Component นี้จะมีขนาดเท่าไหร่แน่เวลาเอาไปประกอบกับชิ้นส่วนอื่น ซึ่งถ้าหากอยากเพิ่มความเร็วขึ้นอีกอาจจะต้องไปเขียนเพิ่ม(แต่ผมขี้เกียจอะนะ ขอใช้พวก VBox, HBox ซ้อนๆ กันละกัน) ขั้นนี้จะถูกเรียกตอนที่มีการเปลี่ยนแปลงข้อมูลซึ่งใส่มาในตัวแปรชื่อ data เช่นข้อมูลที่เกี่ยวข้องกับ Component นี้มีข้อมูลอยู่สามอย่างคือ ชื่อ วันเกิด เบอร์โทรศัพท์แล้วมีการเปลี่ยนค่าวันเกิดไปโดยเลือกจาก Component อื่นที่เป็นปฏิทิน ซึ่งจะทำให้เกิด Event ขึ้นมาชื่อ DataChange หรือ CollectionChange ตามแต่ประเภทข้อมูลที่อยู่ใน data ทำให้มีการเรียก invalidateDisplayList เพื่อให้มีการเปลี่ยนแปลงหน้าตาของ Component ให้ชื่อเปลี่ยนตามหรือวันเกิดเปลี่ยนตาม
UpdateDisplayList เป็นอะไรที่เรียกบ่อยที่สุดแล้ว เพราะว่าเมื่อมีเหตุการณ์อะไรก็ตามมันจะถูกเรียกตลอด เช่น ลากเม้าส์ กดเม้าส์ … แต่ก็ขึ้นอยู่กับ Component ด้วยว่าให้มีการเปลี่ยนแปลงหน้าตาบ่อยขนาดไหน อย่าง List เมื่อลากทีก็จะเรียกทีเพราะว่ามีผลต่อการเน้นสีแถวต่างๆ ดังนั้น ขั้นนี้ควรจะเป็นอะไรที่สามารถวาดได้เร็วๆ เช่นให้พื้นหลังเปลี่ยนสี เป็นต้น
เขียนมาทั้งหมดเพราะแต่ก่อนนี่โค้ดจะมั่วมาก กระจายๆ ไปทุกส่วนเลย – -” สุดท้ายก็เลยต้องหาทางจับย้ายไปย้ายมากว่าจะรู้ว่าควรวางไว้ที่ไหนเล่นนานพอสมควรเลย T T” แต่วันนี้กำลังเบลอๆ เนื่องจากฝนเมื่อวาน งืด แย่จริง วันนี้มีเรียนภาษาอังกฤษถึงดึกด้วย แย่แล้ว ~ ~”
Pingback: แนท » Blog Archive » measure()