mx_internal

เจออะไรแปลกใหม่อีกหละ เพราะว่าต้องดัดแปลง TabNavigator นิดหน่อยโดยการจับ Tab ย้ายมาอยู่ด้านล่างตอนแรกนึกว่าจะง่ายๆ แค่กำหนด property ไรนิดหน่อยก็น่าจะเสร็จ ที่ไหนได้ ต้องเขียนเพิ่มเอง -_-! แล้วก็พบปัญหาว่าไอ้ component อื่นๆ ที่อยู่ใน TabNavigator เนี๊ยะ มันกำหนดตำแหน่งด้วยตัวแปร border ที่ method layoutChrome

    override protected function layoutChrome(unscaledWidth:Number,
                                             unscaledHeight:Number):void
    {
        super.layoutChrome(unscaledWidth, unscaledHeight);

        // Move our border so it leaves room for the tabs
        if (border)
        {
            var borderOffset:Number = tabBarHeight;
            border.setActualSize(unscaledWidth, unscaledHeight - borderOffset);
            border.move(0, borderOffset);
        }
    }

ตัวแปร border มันดันเป็นตัวแปรพิเศษซ่อนอยู่ใน namespace mx_internal ลองดูไฟล์ต้นฉบับมันก็ใส่แค่

use namespace mx_internal

แต่พอเอามาใช้เองบ้างกลับได้ Error มาว่าไม่รู้จัก namespace นี้วิธีแก้คือต้อง import มันมาด้วย

import mx.core.mx_internal

use namespace mx_internal

เท่านี้ก็ใช้ border ได้แล้ว แต่ใน namespace นี้นอกจากตัวแปร border แล้วยังมีอย่างอื่นอีกเยอะแยะมากมาย ไว้สำหรับใช้ภายในคลาสต่างๆ ที่ Adobe ทำขึ้นอยากรู้รายละเอียดลองไปอ่านตาม link ที่อ้างอิงดูหรือไม่ก็ googling ด้วย keyword mx_internal ก็ได้แล้วจะพบเรื่องลึกลับมากมายที่ Adobe เก็บไว้
อ้างอิง: What is mx_internal?

About llun

Just a programmer

, , ,

  • http://llun.info llun

    @iporsut ปกติจะพยายามหลีกเลี่ยง mx_internal อ่ะเลยไม่เคยเขียนถึง วันนี้มันหลีกไม่ได้จริงๆ -_-! แต่ก็ใช้ที่เดียวหวังว่า Adobe คงยังไม่เอาออกในเวลาอันใกล้ จะว่าไปแล้วก็คล้ายๆ package sun ในจาวานะ เพียงแต่อันนี้เวลาจะใช้มันแปลกประหลาดกว่าเท่านั้นเอง

  • iporsut

    เจอมันประจำ เวลาเข้าไปดูโค้ดของ component ที่มากับ flex อยู่ก่อนแล้ว
    แต่ไม่ค่อยได้เข้าไปยุ่งกับมันเท่าไหร่

    ตอนแรกคิดว่า as 3 จะง่ายกว่า java เอาเข้าจริงๆ ซับซ้อนมากๆเลย