mx_internal

原文地址:http://sxy431.blog.163.com/blog/static/55713051201022423817480/

 

關於FLEX中的隱藏方法(mx_internal)

最終我決定還是用“隱藏”這個不是很合適的詞。mx_internal是一個自定義命名空間,至於“命名空間”到底是什麼就不在這裏說了。總之,當我們在代碼頭部寫上:

use namespace mx_internal

(如果是.AS文件,需要手動import mx.core.mx_internal,注意這個不會有代碼提示)

那麼所有以mx_internal爲命名空間的方法就會成爲public方法,也可以在代碼提示中正常地列出(會被標記爲黃色)。

下面列舉幾個mx_internal方法

contentPane

所有的UI容器都會有這樣一個屬性,他的作用是在原有的容器裏再套上一個子容器,方便放置內容。但要注意,contentPane不一定有值,某些時候就是直接放在原來的容器裏。(具體的我就沒看了)

由於有這樣一個東西,而這個東西的mouseEnabled默認爲true,所以,當你將Canvas和Canvas裏的組件mouseEnabled設置爲false後,會發現Canvas裏的組件還是會遮擋下面的鼠標事件。這就是因爲在Canvas和組件之間隔了一層依然可以觸發鼠標事件的contentPane。

因此,只要設置Canvas的contentPane.mouseEnalbed=false即可

$addChild

衆所周知,Canvas,Application容器是不能直接addChild一個Sprite的。其實不然,$addChild調用的是super.addChild(),參數是DisplayObject,所以即使是Sprite也可以載入。

UI容器的addChild執行了非常多的操作,換成$addChild,我們有理由相信會出現各種各樣的問題。這個例子只是爲了說明,UI控件與容器其實沒有本質區別,禁止直接加載Sprite,是爲了強制你使用UI控件。畢竟不願意用UI控件的話,還用FLEX幹什麼?

createdComponents

Repeater是製作論壇的首選,但我用這個用得比較少。

總之,第一次用的時候,我死活找不到如何獲得Repeater中的某個特定對象,所以就找到了這個createdComponents屬性,它裏面包含了Repeater的對象數組。

renderArray

DataGrid的所有itemRenderer對象,都在裏面- -

首先,不建議大家用這個,itemRenderer有特殊的生成及銷燬方式,它的實例引用是非常不靠譜的。正常來講,都應該用數據來進行兩者之間的交互。

一定要用的話,renderArray是一個2維數據,一行,一列。其實這個屬性基本沒什麼用,只要DataGrid一滾動,整個對應關係就亂掉了。

 

從上面可以看出,這些方法很多都是些不是很靠譜的方法,他們並不穩定。這就是他們是mx_internal而不是public的原因,

一般情況下,不建議使用他們。除非,你實在無路可走。而且他們隨時可能在下一個版本的FLEX中改變意義或者移除,這會讓你的程序可靠性降低。

至於如何找到他們,一種便是讀framework,他們前面的註釋會講名他們的意義。或者在調試模式下,查看對象的屬性列表,也可以看到他們。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章