วิธีการวนรอบผ่านออบเจ็กต์ผลลัพธ์ใน Flex
อย่างถูกต้อง
เมื่อทำงานกับ Apache Flex นักพัฒนามักพบความจำเป็นในการวนรอบผ่านข้อมูลที่ดึงมาจากบริการเว็บ สถานการณ์ทั่วไปคือการจัดการข้อมูล XML ที่ส่งคืนผ่านการเรียกใช้ HTTPService
อย่างไรก็ตาม หลายคนประสบปัญหาโดยเฉพาะเมื่อการตอบสนองรวมถึงจำนวนแถวที่แตกต่างกัน ในบทความนี้ เราจะสำรวจวิธีการวนรอบผ่านออบเจ็กต์ผลลัพธ์ XML เหล่านี้อย่างถูกต้องโดยไม่เจอข้อผิดพลาด
ปัญหา: การวนรอบผ่านข้อมูล XML
ในสถานการณ์ทั่วไป คุณอาจทำการเรียกใช้ HTTPService
และได้รับข้อมูล XML ที่มีโครงสร้างดังนี้:
<DataTable>
<Row>
<text>foo</text>
</Row>
<Row>
<text>bar</text>
</Row>
</DataTable>
เมื่อประมวลผลข้อมูลนี้ นักพัฒนาหลายคนใช้วนลูปแบบ for-loop เพื่อวนรอบผ่านโหนด “Row” โดยใช้โค้ดต่อไปนี้:
for (var i:int = 0; i < event.result.DataTable.Row.length; i++) {
if (event.result.DataTable.Row[i].text == "foo")
mx.controls.Alert.show('พบ foo!');
}
แม้ว่าโค้ดนี้จะทำงานได้อย่างถูกต้องเมื่อมีโหนด “Row” หลายโหนด แต่จะเกิดข้อผิดพลาดเมื่อมีเพียงหนึ่ง “Row” โหนดเพราะว่า length
ไม่ใช่คุณสมบัติของออบเจ็กต์ XMLList
ที่ส่งคืน ในกรณีเช่นนี้ อาจนำไปสู่ข้อผิดพลาดที่ไม่คาดคิด
วิธีการแก้ไข: การใช้ for each
Loop
การเข้าใจความยาวของ XMLList
กุญแจสำคัญในการแก้ปัญหาคือการรับรู้ว่า length
เป็นเมธอดของ XMLList
ไม่ใช่คุณสมบัติ ดังนั้นวิธีที่ถูกต้องในการรับจำนวนแถวควรเป็น:
event.result.DataTable.Row.length();
อย่างไรก็ตาม การสอบถามความยาวโดยตรงอาจยังคงนำไปสู่ความสับสน โดยเฉพาะสำหรับนักพัฒนาที่อาจมองข้ามหรือมีการตอบสนอง XML ที่ไม่สอดคล้องกัน
แนวทางปฏิบัติที่ดีที่สุด: ใช้ for each
Loop
เพื่อเพิ่มความชัดเจนของโค้ดและหลีกเลี่ยงข้อผิดพลาดที่อาจเกิดขึ้น การใช้ for each
loop เมื่อทำงานกับ XMLList
จะดีกว่า วิธีนี้ปลอดภัยกว่าและเหมาะสมมากขึ้นสำหรับการวนรอบผ่านโหนด XML:
for each (var node:XML in event.result.DataTable.Row) {
if (node.text == "foo") {
mx.controls.Alert.show('พบ foo!');
}
}
ประโยชน์ของ for each
Loop:
- ความอ่านง่าย: โค้ดเรียบง่ายและอ่านง่ายกว่า
- ความแข็งแกร่ง: ช่วยให้หลีกเลี่ยงปัญหาที่เกี่ยวข้องกับการเข้าถึงความยาว ทำให้เกิดข้อผิดพลาดน้อยลง
- ความยืดหยุ่น: ทำงานได้อย่างราบรื่นกับจำนวนโหนดลูกที่แตกต่างกัน
สรุป
การจัดการข้อมูล XML ใน Flash และ Apache Flex อาจเป็นเรื่องยุ่งยากหากไม่ดำเนินการอย่างถูกต้อง โดยการใช้ for each
loop เพื่อลูปผ่านผลลัพธ์ XMLList
จากการเรียกใช้ HTTPService
คุณไม่เพียงแต่ป้องกันข้อผิดพลาดที่เกี่ยวข้องกับโหนดลูกเดี่ยว แต่ยังสร้างโค้ดที่สะอาดและง่ายต่อการบำรุงรักษาอีกด้วย
การดำเนินการตามแนวทางนี้จะช่วยเพิ่มคุณภาพของโค้ดและลดความเป็นไปได้ของปัญหาในระหว่างการทำงานเมื่อจัดการกับข้อมูล XML ในแอปพลิเคชัน Flex ของคุณ