หลังจากหลีกเลี่ยงมานานไม่ยอมใช้มัน วันนี้ก็มีงานที่ต้องใช้จนได้ SharedObject ที่ฟังจากเพื่อนและพี่มามันคือสิ่งที่ไว้เก็บข้อมูลฝั่งไคลเอ็นท์ของ Flex คล้ายๆกับ คุ๊กกี้ ของเว็บบราวเซอร์ วิธีใช้นั้นมันก็ง่ายแสนง่ายเพราะมันเป็นเพียงตารางอันนึงไว้เก็บ key กับ value โดยเวลาจะยัดอะไรใส่ลงไปก็บอกว่า ไอ้นี่ใช้ชื่ออะไรสำหรับอ้างอิง เวลาจะเอามาใช้ก็ใช้ชื่อนั้นดึงออกมา สิ่งที่ผมเอามาใช้คือไว้จำว่าครั้งสุดท้ายที่เข้ามาในโปรแกรมนั้นเปิดหน้าอะไรเอาไว้ เวลาเปิดมาอีกครั้งจะได้ไม่ต้องเสียเวลาไปกดเปิดตรงนั้นอีก เปิดมาให้เลยเมื่อเข้ามา ลองดูโค้ดตามด้านล่างเลยละกัน import flash.net.SharedObject; import mx.events.ItemClickEvent; private var cookie:SharedObject = SharedObject.getLocal(“views”) protected override function createChildren():void { super.createChildren() if (cookie.data.value != null) { views.selectedIndex = cookie.data.value } } private function switchView(event:ItemClickEvent):void { views.selectedIndex = event.index cookie.data.value = event.index cookie.flush() [...]
Event
โอ่ย เป็นเรื่องที่เขียนยากพอควรเลยเรื่องนี้ เอาเป็นว่าสรุปแบบที่ผมเข้าใจเก็บไว้ก่อนละกัน ใน Flex เวลาทำงานกับ UIComponent ต่างๆ สิ่งหนึ่งที่คิดว่าต้องเจอกันอย่างแน่นอนและต้องใช้ด้วยคือ Event ซึ่งมันมีมาให้อัตโนมัติกับ UIComponent ทุกตัว โดยถ้าเทียบกับภาษาอื่นก็อย่างจาวา ก็ให้นึกถึงพวก listener ทั้งหลายได้เลย คล้ายๆ กัน Event ของ Flex อาจต่างจากภาษาอื่นตรงที่มันมีลำดับขั้นในการทำงาน แทนที่จะมีการส่งขึ้นไปแล้วเรียกฟังก์ชั่นโดยตรง คือ Capturing Targeting Bubbling ขั้นแรก Capturing เป็นขั้นที่ Flex จะไล่หาว่า Component ไหนจะเป็นตัวรับ Event เพื่อเอามาทำงานโดยไล่จาก Component ที่อยู่บนสุดลงมาถึง Component ปัจจุบัน โดยขณะที่ไล่ลงมาก็จะมีการเปลี่ยนตัวแปร currentTarget เป็น Component ปัจจุบันที่เรียกอยู่ ปกติแล้วขั้นนี้ไม่ค่อยได้ใช้ จะใช้ขั้น Bubbling กันซะมากกว่า แต่ถ้าหากต้องการจะใช้จริงๆ สามารถกำหนดตอนใส่ Listener ได้โดยให้ argument [...]
for each in
วันนี้ทำงานแล้วเจอเรื่องนี้ติดต่อกันเลยคันไม้คันมือจดไว้หน่อยดีกว่า ใน Flex มี for ให้ใช้อยู่สองแบบคือ แบบที่เห็นในภาษาซีทั่วไป for( initial, condition, post operation) กับแบบที่เป็น iterator เหมือนของ php หรือ python คือ for … ( received in list ) แต่แบบแรกคิดว่าคงเป็นกันหมดแล้ว ไม่เขียนถึงละกัน แต่แบบหลังนี่สิ ที่น่าเล่นเพราะมันดันใช้ได้อีกสองแบบ เพื่อเอาค่าออกจาก list ในภาษา php เวลาใช้ for-in เพื่อเอาค่าออกมาสามารถกำหนดไปได้เลยว่า ตัวแปรไหนจะใช้เพื่อรับ key ตัวแปรไหนจะใช้สำหรับรับ value เช่น $dictionary = array(“pFz” => 80, “llun” => 23, “sourcode” => 25); foreach ($dictionary [...]
measure()
คราวที่แล้วเขียนไปแค่สี่ขั้นตอน แต่ถ้าใครลองโหลดไฟล์ที่ @iporsut แนบมาใน comment คงเห็นรายละเอียดที่มากกว่านั้นเยอะแยะเลย แต่ผมก็ได้แค่อ่านผ่านๆ นะ ยังไม่ได้ดูละเอียดเท่าไหร่ แหะๆ แต่วันนี้จะมาเขียนถึงขั้นลึกลับอีกขั้นนึงนั่นคือ measure() เพราะต้องใช้มันเข้าพอดี -_-” ปกติฟังก์ชั่นนี้จะไม่ค่อยต้องเขียนเองเท่าไหร่เพราะหน้าที่ของมันคือใช้บอกว่า component เรามีขนาดเท่าไหร่ แล้วให้ขั้นถัดไปคือ updateDisplayList เป็นคนวาด ซึ่งวิธีทำปกตินั้นก็ง่ายแสนง่ายคือเรียก component ลูกให้วัดค่าออกมาให้ แล้วก็จับมันบวกๆ ลบๆ กันแล้วส่งออกไป แต่มีปัญหากับผมอีกและ -_-” เพราะว่าถ้าหากเราตั้งขนาดของ component ลูกเป็น % แล้วหละก็มันก็มีบางอย่างที่คำนวนออกมาให้พลาดเหมือนกัน(จริงๆ ก็ไม่พลาดหรอกแต่ผลลัพธ์ที่ต้องการมันไม่ไช่อย่างนั้นหนะ) เช่น List ลองมาดูโจทย์ผมละกัน โจทย์ก็แสนจะง่ายดาย มี List ย่อยๆ หลายๆ List ที่แต่ละ List มีข้อมูลไม่เท่ากัน โดยต้องเอา List เหล่านั้นมารวมกันให้เป็น List ใหญ่ๆ ก้อนนึง อ๊ะ เหมือนธรรมดา ยังไม่หมดๆ [...]
Flex validator
พักหลังต้องเก็บรายละเอียดงาน ช่วงนี้ก็เลยมีทั้งแก้ไขโค้ดเก่าๆ ให้ทำงานเร็วขึ้น จากแต่ก่อนที่พอให้ทำงานได้ แล้วก็เก็บพวกฟอร์มต่างๆที่ใส่ตัวตรวจสอบก่อนที่จะส่งไปยังเซิร์ฟเวอร์ เพื่อไม่ให้ทำงานผิดพลาด (จริงๆก็ต้องใส่ทั้งสองฝั่งอะแหละ แต่ผมก็ทำทั้งสองฝั่งอ่ะนะ – -”) คราวนี้ก็เลยเขียนถึง Validator ใน Flex ซะหน่อย ปกติแล้วเวลาจะใส่อะไรไปยัง Component อื่นก็จะจับมันยัดเข้าไปใต้ Tag ของ Component นั้นแต่ Validator เวลาใส่กลับต้องอยู่ด้านนอกสุดและไม่อยู่ใต้ Tag อะไร โดยจะมี property พื้นฐานบางอย่างที่มีเหมือนกันคือ source: คือตัวแปรที่จะเอาไว้ตรวจสอบ อาจจะเป็น object ทั้งก้อนเลยก็ได้ property: ประเภทของ form ว่ารับมาเป็นอะไร ส่วนใหญ่แล้วจะเป็น text trigger: component ที่รอรับเหตุการณ์เตรียมตรวจสอบ triggerEvent: เมื่อเกิดเหตุการณ์ที่กำหนดใน property นี้จาก component ที่กำหนดใน trigger แล้วจะทำการตรวจสอบ เช่น RegExpValidator อันนี้คือผมไว้สำหรับตรวจว่า input [...]