2011-07-25 126 views
5

我想在我的MXML文件中包含一个MXML文件,就像您可以使用include指令在AS3中包含外部文件一样。使用include指令可以在编译时将外部文件中的代码放入原始文件,并将它放在同一个作用域中。如何将MXML文件包含在另一个MXML文件中?

例如,

Application.mxml:

<Application> 

    <source="external.mxml"/> 

</Application> 

External.mxml:

<Styles/> 

<Declarations> 
    <Object id="test"/> 
</Declarations> 

我需要保持这种代码/ MXML/XML外部与原始文件保持一致。不要问我为什么要这样做。

另一个例子。这里是我当前的代码(简化)都在1个MXML文件:

...

File1.mxml 
<Button click="clickHandler()"/> 

<Script> 
public function clickHandler():void { 

} 
</Script> 

...

这里是我想要的东西:

...

File1.mxml 
<Group> 

    <source="File2.mxml"/> 

    <Button click="clickHandler()"/> 

<Group> 


File2.mxml 
<Script> 
public function clickHandler():void { 
    trace(this); // File1.mxml 
} 
</Script> 

...

我想了分裂我的代码到一个单独的文件...

~~ 更新 ~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

虽然不是我要求使用“代码背后”的方案取得了部分功劳,将代码打破了视野。所以我创建了一个MXML文件MyGroup.mxml或MyGroup.as,它扩展了包含clickHandler代码的Group。

这种方法的问题是,我被锁定到我正在扩展的类类型,硬编码视图。因此,例如,如果我想将要分割为单独文件的MXML类设为组,则必须扩展组。

我已经完成了这项工作,并且它不好。人们开始设置样式和视觉方面,或者在类后面的代码中对特定属性进行分组/查看特定属性,以及后续是否需要对其进行更改时,或者我们最终将所有这些依赖关系发布到容器。它变得一团糟。另外,使用Code Behind你不能重用它(重用方式包括styles.as被重用)。所以这不是一个解决方案,但认为我会提到它。

这里是例如后面的​​代码,

MyGroupBehind.mxml:

<Group> 

    <Script> 
    public function clickHandler():void { 
     trace(this); // File1.mxml 
    } 
    </Script> 

</Group> 

MyGroupAhead。MXML:

<MyGroupBehind> 

    <Button click="clickHandler()"/> 

</MyGroupBehind> 

回答

1

只需输入您的自定义组件的名称,然后按Ctrl +空格键。代码完成将填充可能要添加的可能内容的列表,包括组件的名称。使用向下箭头选择组件的名称,然后按enter键。代码完成将设置命名空间并为组件启动标签。如果你到行尾并键入“/>”(不包括引号),瞧!您将拥有一个代表您的自定义MXML组件的内联代码。

+0

是的,这将在文档中创建组件的实例,但我需要它将外部MXML视为在同一范围内的同一文档的一部分。比方说,我有一个脚本标记中带有按钮和点击处理程序的文档。我想采取该点击处理程序,并将其放置到另一个mxml文件。 –

0

首先,任何外部mxml应该是一个有效的XML。现在,只要你有一个有效的MXML文件,只需用它的名字像下面添加:

<Application> 
<external:External/> 
</Application> 

其中“外部”是您External.mxml文件的命名空间。

+0

-1:仅创建一个实例。 OP想要内联实际代码。 – merv

2

MXML由编译器转换成类,所以没有办法做你在问什么。

我个人认为这是件好事。把事情分解成单独的文件并不等于“更有组织性”。事实上,我会说它达到了完全相反的效果。你会更好地专注于一个适当的组件结构,恕我直言。

+1

我会说它更有组织,我正在使用适当的组件结构。加上Adobe使用的包括,我想要做的,在官方Flex组件中的等效物。 –

+0

@ gigawatts区别在于那些包含的不是“类代码”。它们包括常见样式或配置设置等内容。你试图做的事情是不可能的,因为一旦MXML被编译,代码就驻留在类中。即使你可以包含该代码,它也不会给你想要的效果(一个合并的命名空间)。 – drkstr

+0

已记录。 Flex编译器有一些独特的隐藏功能。我当时和希望有类似的指令来实现这一点。 IE并非所有的MXML标签都转换成类,声明,元数据,风格等 –

-1

说我的MXML文件叫做例子的意见文件夹中。只需在您想要的这个MXML文件中调用它即可,例如:

<views:Example/> 
+0

-1:这只会创建一个实例。这也与[M.D.同样错误的答案](http://stackoverflow.com/a/6819692/570918)基本相同,因此我将其标记为关闭。 – merv

相关问题