我想知道每个组件有一个mxml
文件是否是个好主意,然后将这些不同的组件内联在一个mxml
文件中,并能够在这些mxml
文件之间进行通信?
例如,我有一个overView.mxml
,在这,我内联其他mxml
文件,其中包含组件,如datagrid
,另一个mxml
包含可能是一个形式。我是否能够通过访问其id的形式mxml
与网格数据通信?
是的,这是个好主意。这比创建一个包含所有功能的巨大的MXML或类要好得多。
同时,它带来了一些开销。要在类之间通信(MXML文件只是类),您必须调度事件。包含子组件的父组件可以设置其子组件的公共属性(带或不带数据绑定)。
你应该尽可能地去解耦组件。尽量不要在子组件显式引用父组件的地方编写代码(即:尽量不要使用parent
属性)。相反,从子组件调度一个事件,让父组件侦听该事件。
关于您的数据网格和表单的示例:
如果这两个对象之间有很多交互,那么将它们保存在同一个MXML文件中会容易得多。这听起来不像是一个父组件包含子组件的场景。由于这些"兄弟"可能会相互通信,因此将它们放在同一个MXML文件中会更容易。但是,如果事情变得复杂,并且文件增长到超过几百行,那么将它们分开可能会受益。
假设您计划在项目的其他地方使用表单组件,而不是数据网格,那么将它们分开也是有意义的。
关于你的问题:"表单组件将能够通过访问它的id与网格组件通信吗?":
从技术上讲,是的,您可以这样做,但只有通过将表单组件与网格组件紧密耦合才能做到。表单组件可以使用parent
属性上升一级并使用网格的id。但是,由于parent
属性的类型为DisplayObjectContainer
,您必须欺骗编译器,并且您失去了强类型的好处(因为DisplayObjectContainer
没有作为网格ID的属性)。因此,虽然这是可能的,但这不是一个好的设计,并且会阻止您在其他地方重用表单组件。
这种紧密耦合违背了创建独立组件的目的。因此,您可以通过调度事件来促进通信,或者将网格和表单放在同一个文档中:)
TLDR:
通常应该尝试创建可重用的组件。所以我通常倾向于这个方向。MXML文件只是类,所有人们在面向对象编程中经常谈论的东西都适用。