[url]http://uh.9ria.com/space-12147-do-blog-id-680.html[/url]
关于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,他们前面的注释会讲名他们的意义。或者在调试模式下,查看对象的属性列表,也可以看到他们。
关于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,他们前面的注释会讲名他们的意义。或者在调试模式下,查看对象的属性列表,也可以看到他们。