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