【问题标题】:Flex: Is it a good idea or design to include an MXML another MXML file?Flex:将 MXML 包含在另一个 MXML 文件中是一个好主意或设计吗?
【发布时间】:2013-02-15 12:22:54
【问题描述】:

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

例如,我有一个overView.mxml,在此,我内联了其他包含datagrid 等组件的mxml 文件,另一个mxml 包含可能是一个表单。我能否通过以mxml 形式访问其 ID 来与网格数据进行通信?

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

非常感谢。

【问题讨论】:

  • 如果你想创建自定义组件,那么你可以使用你的想法没有问题。自定义组件应该包含两个以上的控件......

标签: apache-flex mxml flex4.6


【解决方案1】:

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

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

您应该尽可能地解耦您的组件。尽量不要在子组件显式引用父组件的地方编写代码(即:尽量不要使用parent 属性)。而是从子组件调度事件并让父组件监听该事件。

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

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

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

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

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

这种紧密耦合违背了创建单独组件的目的。所以你要么通过调度事件来促进这种通信,要么将网格和表单放在同一个文档中:)

TLDR:

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

【讨论】:

  • 我明白了...非常感谢您提供非常详细的解释。我对 flex 很陌生,所以我很难真正理解你在说什么。我确实在一定程度上理解。所有在线示例都将动作脚本和所有组件放在一个 mxml 文件中。我编写的程序也将所有内容都放在一个 mxml 中。所以要分开并使这些组件相互作用在一起。你知道任何教程或 adobe 帮助链接可以显示我如何做到这一点吗?
猜你喜欢
  • 2010-12-08
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多