Flex:将MXML另一个MXML文件包含在内是一个好主意还是设计?

时间:2013-03-01 04:04:42

标签: flex mxml flex4.6

我想知道为每个组件创建一个mxml文件是否是个好主意,然后在一个mxml文件中内联这些不同的组件,并能够在这些mxml个文件之间进行通信?

例如,我有一个overView.mxml,在此,我内联其他mxml文件,其中包含datagrid等组件,另一个mxml包含可能是一个表单。我是否能够通过mxml

形式访问其ID来与网格数据进行通信

如果我的问题不明确,请告诉我。我会尝试改写它。

非常感谢。

1 个答案:

答案 0 :(得分:2)

是的,这是一个好主意。它比创建一个包含所有功能的巨型MXML或类要好得多。

与此同时,它会带来一些开销。要在类之间进行通信(MXML文件只是类),您必须分派事件。包含子组件的父组件可以设置其子组件的公共属性(带或不带数据绑定)。

您应该尝试尽可能地分离您的组件。尽量不要编写子组件明确引用父组件的代码(即:尽量不使用parent属性)。而是从子组件调度事件并使父级侦听事件。

关于您的数据网格和表单示例:

如果这两个对象之间会有很多交互,那么将它们保存在同一个MXML文件中要容易得多。这听起来不像是一个包含子组件的父组件。由于这些“兄弟姐妹”很可能彼此沟通,因此将它们放在同一个MXML文件中会更容易。但是,如果事情变得复杂并且文件增长到超过几百行,您可能会从分离它们中受益。

假设您计划在数据网格中使用项目中其他位置的表单组件,那么将它们分开也是有意义的。

关于您的问题:“表单组件是否能够通过访问它的ID与网格组件进行通信?”:

从技术上讲,是的,您可以这样做,但只能通过将表单组件与网格组件紧密耦合。表单组件可以使用parent属性上升一级并使用网格的id。但是由于parent属性被键入为DisplayObjectContainer,你必须欺骗编译器并且你失去强类型的好处(因为DisplayObjectContainer没有属性是ID你的网格)。因此虽然这是可能的,但这不是好的设计,并且阻止您在其他地方重用表单组件。

这种紧密耦合破坏了创建单独组件的目的。因此,您可以通过调度事件或将网格和表单放在同一文档中来促进通信:)

<强> TLDR:

您通常应该尝试创建可重用的组件。所以我一般都倾向于那个方向。 MXML文件只是类,人们在面向对象编程中谈论的所有常见内容都适用。