Flex的MXML文件结构

       下面是一个MXML

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml layout="absolute">

   

</mx:Application>

 

第一行声明XML文件采用的语法版本号和文件采用的编码格式。mx:Application标签是一个特殊的标签。在每一个MXML文件,但作为程序入口的运行文件只有一个,主文件的标示是根节点为mx:Application,一个程序中出现一个mx:Application节点。还有一个属性xmlns:mx=http://www.adobe.com/2006/mxml表示将mx定义为XML的命名空间。xmlns标签专门用来定义XML的命名空间,XML命名空间可以用来定义一套独立的XML标签,并且为这些标签指定特殊的解析方式。比如XML文件中默认的标签格式为:<Button>node</Button>,这里的Button节点作为一个普通的文本节点,没有特殊的意义。定义命名空间后,在节点上加上空间前缀:<mx:Button></mx:Button>这时候就代表mx空间下的Button对象。

Mx命名空间对应的路径是”http:// www.adobe.com/2006/mxmlFlex的配置文件中将这个路径定义为一个全局资源标识符,并对应了一个XML文件。在这个文件中,列出了mx命名空间下的所有标签。在Flex SDK3.0.1 目录下的frameworks目录中找到flex-config.xml文件,打开并找到如下内容:

 

<namespaces>

     <namespace>

            <uri>http://www.adobe.com/2006/mxml</uri>

            <manifest>mxml-manifest.xml</manifest>

     </namespace>

</namespaces>

 

从上面可以发现,http://www.adobe.com/2006/mxml”这个URImxml-manifest.xml文件对应,打开该文件,该文件列出了MXML中的所有标签与标签关联的类文件路径。

<?xml version="1.0"?>

 

<componentPackage>

 

   <component id="FileSystemComboBox" class="mx.controls.FileSystemComboBox"/>

<component id="FileSystemDataGrid" class="mx.controls.FileSystemDataGrid"/>

      。。。。。。。

<component id="WebService" class="mx.rpc.soap.mxml.WebService"/>

<component id="WebServiceOperation" class="mx.rpc.soap.mxml.Operation"/>

 

</componentPackage>

 

 

在开发中,当程序有很多MXML文件和AS文件时,为了方便调用,我们可以将功能相似的文件放在一个文件夹中,定义一个命名空间在定义命名空间时,为了方便,很一般直接指定命名空间包括的标签路径。比如:

xmlns:myComp=”components.*”

上面使用了通配符”*” components目录下所有的MXML文件个ActionScript类文件都被包括在myComp命名空间下。例如components中有一个Loginpanel.mxml,则程序中调用这个文件时,代码如下

<myComp: Loginpanel></myComp: Loginpanel>

myComp下的标签被自动指向components文件,当标签数量较多而且分布在不同文件夹时,可以效仿Flex配置文件的做法,使用XML文件来描述。

ref:hi.baidu.com/flexok/blog/item/83397ca93c70dc044a36d61b.html

Flex 命名空间

       通过命名空间可以控制所创建的属性和方法的可见性。请将 public、private、protected和 internal 访问控制说明符视为内置的命名空间。如果这些预定义的访问控制说明符无法满足您的要求,您可以创建自己的命名空间。如果您熟悉 XML 命名空间,那么,您对这里讨论的大部分内容不会感到陌生,但是ActionScript 实现的语法和细节与 XML 的稍有不同。即使您以前从未使用过命名空间,也没有关系,因为命名空间概念本身很简单,但是其实现涉及一些您需要了解的特定术语。要了解命名空间的工作方式,有必要先了解属性或方法的名称总是包含两部分:标识符和命名空间。标识符通常被视为名称。例如,以下类定义中的标识符是 sampleGreeting 和sampleFunction():
class SampleCode
{
    var sampleGreeting:String;
    function sampleFunction () {
    trace(sampleGreeting + " from sampleFunction()");
    }
}


        只要定义不以命名空间属性开头,就会用默认 internal 命名空间限定其名称,这意味着,它们仅对同一个包中的调用方可见。如果编译器设置为严格模式,则编译器会发出一个警告,指明 internal 命名空间将应用于没有命名空间属性的任何标识符。为了确保标识符可在任何位置使用,您必须在标识符名称的前面明确加上 public 属性。在上面的示例代码中,sampleGreeting 和 sampleFunction() 都有一个命名空间值 internal。使用命名空间时,应遵循以下三个基本步骤。

 

第一,必须使用 namespace 关键字来定义命名空间。例如,下面的代码定义 version1 命名空间:

namespace version1;


第二,在属性或方法声明中,使用命名空间(而非访问控制说明符)来应用命名空间。下面的示例将一个名为 myFunction() 的函数放在 version1 命名空间中:
version1 function myFunction() {}


第三,在应用了该命名空间后,可以使用 use 指令引用它,也可以使用该命名空间来限定标识符的名称。下面的示例通过 use 指令来引用 myFunction() 函数:
use namespace version1;
myFunction();
您还可以使用限定名称来引用 myFunction() 函数,如下面的示例所示:
version1::myFunction();