Flex: mx_internal

在阅读Flex源代码的时候,我们经常可以见到某些property或者function的作用域为mx_internal。根据Adobe的说法,mx_internal是用来标记Flex框架内部property和function的;在没有特殊声明的情况下,被标记的property和function不会暴露给Flex的使用者。那么,我们如何来使用mx_internal呢?CodeOfDoom上有一篇文章对此进行了详细的解释。

原文: http://codeofdoom.com/wordpress/2009/03/12/when-and-how-to-use-mx_internal-in-flex/

如何使用mx_internal?

使用mx_internal有两种方式,一种是导入mx_internal命名空间:

import mx.core.mx_internal;  
use namespace mx_internal;  

导入命名空间后,Flex代码就可以使用所有作用域为mx_internal的property和function。在使用到这些property和function的地方,最好进行一下注释以标明这是mx_internal的变量 — 这样做有利于代码维护。

另一种方式是在使用到某个mx_internal变量的时候,才具体声明一下:

object.mx_internal::inputField.restrict;  

原文作者认为第二种方式更好,因为这样可以在代码层面显式声明使用的变量中哪些是mx_internal的,哪些不是。

使用mx_internal有什么好处?

好处是显而易见的 — 编写代码的时候可以访问更多的property和function。比如,当我们在IDE中输入panel对象后,IDE将提示所有可用的property和function:

在声明use namespace mx_internal之后,我们可以得到更多的选择:

mx_internal示例

我们可以用”自定义NumericStepper组件”来举例说明mx_internal的使用。

mx:NumericStepper组件由一个文本输入框和两个按钮组成,用户可以在文本输入框中输入任意数值,也可以点击步进按钮来改变数值。如果我们想要禁止用户在文本输入框中直接输入数值该怎么办呢?有了mx_internal,我们可以这么做:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  
   layout="absolute" creationComplete="complete()" >
   <mx:Script>
     <![CDATA[
       public function complete():void{
         stepper.mx_internal::inputField.editable = false;
       }
     ]]>;
   </mx:Script>

   <mx:HBox id="hbox">
     <mx:NumericStepper id="stepper" />
   </mx:HBox>

</mx:Application>  

如果我们还想改变NumericStepper中按钮的行为,我们可以这么做:

[Bindable]
[Embed(source='../red.png')]
private var redIcon:Class;      

public function complete():void{  
  stepper.mx_internal::inputField.editable = false;
  stepper.mx_internal::nextButton.setStyle("icon",redIcon);
  stepper.mx_internal::prevButton.setStyle("icon",redIcon);
}

效果为:

谨慎使用mx_internal

使用mx_internal会有什么问题吗?答案是肯定的。使用mx_internal必须非常小心。

问题一:所有作用域为mx_internal的property和function都不会出现在Flex SDK的文档中 — mx_internal被设计为仅在Flex框架内部使用。因此,只能通过阅读Flex源代码来寻找合适的mx_internal变量。

问题二:因为mx_internal被设计为仅在框架内部使用,因此在不同版本的Flex中无法保证兼容性 — 随着Flash Player的升级,当前使用的mx_internal变量有可能会被删除,或者赋予不同的含义。

Chuan Shao

Read more posts by this author.

Shanghai

Subscribe to Chuan's blog

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!