【问题标题】:Add MXML event listener on component's child在组件的子组件上添加 MXML 事件侦听器
【发布时间】:2013-05-21 11:57:43
【问题描述】:

我不确定这是否可行,但我想在 MXML 的子组件上添加一个事件侦听器。像这样的:

我的组件

<s:Group>
    <s:Button id="myBtn" label="click me" />
</s:Group>

主要应用

<local:MyComponent>
    <local:myBtn click="doSomething()" />
</local:MyComponent>

我知道我可以在代码中做到这一点,我只是想知道是否可以在 MXML 中做到这一点。如果可能,正确的语法是什么?

【问题讨论】:

    标签: actionscript-3 apache-flex mxml


    【解决方案1】:

    这是可能的,但需要大量设置。

    首先将事件元数据添加到 MyComponent:

    <s:Group>
      <fx:Metadata>
            [Event(name="click", type="flash.events.MouseEvent")]
      </fx:Metadata>
        <s:Button id="myBtn" label="click me" />
    </s:Group>
    

    理论上你应该确保你的组件也调度点击事件;但是,由于默认情况下单击会冒泡,因此您无需为该事件执行任何其他操作。

    现在,您的主组件将在 MXML 代码提示中显示事件,编译器不会报错:

    <local:MyComponent click="doSomething()>
    </local:MyComponent>
    

    一般来说,我不建议尝试深入到组件中以便将侦听器放置在组件的子级调度的事件上。这是封装的突破。父组件不应该知道子组件的实现细节。

    【讨论】:

    • 我的问题是我有一个包含很多按钮的组件,我想知道按下了哪个按钮。我使用了你的冒泡解决方案,然后switch(event.target) 来检查按钮
    • 这行得通;但在那种情况下;我会建议每个按钮调度自己的自定义事件类型。这样,您的父母正在与孩子定义的一组 API 进行交互;而不是“了解”孩子的具体情况。
    • 我知道你的意思,而且我以前也这样做过。它非常适合封装,但要管理和设置很多。此外,我认为知道组件调度哪些事件以及它具有哪些属性/子组件(按钮)之间没有太大区别。
    猜你喜欢
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 2010-11-26
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多