关于Flex中的隐藏方法

最终我决定还是用“隐藏”这个不是很合适的词。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,他们前面的注释会讲名他们的意义。或者在调试模式下,查看对象的属性列表,也可以看到他们。

 

原文自:http://bbs.actionscript3.cn/thread-21392-1-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值