需要Flex通用架构/逻辑建议

时间:2010-10-05 02:01:36

标签: flex

我有一个架构/逻辑问题。这就是我想要实现的目标:

  • a)我的主要部分有三个按钮 应用程序。
  • b)当您点击任何一个时 按钮,基于的海关组件 一个TitleWindow打开。
  • c)在 titleWindow是是/否选择器。
  • d) 如果答案是“是”,那么我想要 更改按钮的颜色 在主应用程序中点击的 红色。如果答案是“否”那么 没有任何事情发生在按钮中 主应用程序。

我的问题是什么是“记住”点击了哪个按钮并处理是/否问题的最佳/最简单方法。

解决方案:

  • a)创建一个id为的变量 在主要点击的按钮 应用程序并在中设置一个公共变量 该ID的组件

  • b)然后在其中制作自定义事件 处理是/否的组件 题。自定义事件将使用 按钮id作为参数并发送 回到主应用程序。

有更好/更简单的方法吗?我接近它了吗?将按钮ID“发送”到组件中然后再次退出是否有意义?

谢谢。

-Laxmidi

3 个答案:

答案 0 :(得分:1)

我宁愿在主应用程序中有一个lastClickedButton私有变量,只要单击其中一个按钮就可以设置它。单击Yes按钮时,TitleWindow组件将调度主应用程序将侦听的正常事件(具有适当的事件类型,例如YES_CLICKED)。从事件处理程序设置lastClickedButton的颜色。

想法是单击了哪个按钮是仅与主应用程序相关的信息 - TitleWindow组件与它无关。当我们将按钮id传递给TitleWindow时,我们不必要地在主应用程序上创建依赖项。如果将来你想要将TitleWindow组件重用于其他目的,那么这个按钮id变量将变得毫无意义。

答案 1 :(得分:1)

看一下这个命令模式。

按下该按钮时,将引用传递给单击该命令的按钮。

如果你使用的是Spring AS,就像这样......

<mx:Button id="myButton1" click="EventBus.dispatchEvent(new CommandEvent('testButton', myButton1))" />

在命令中,抛出对话框,处理响应并在传入的按钮的引用上设置样式。

这将你正在做的事情的逻辑与UI组件本身分离(它甚至不需要是一个按钮,该命令可能需要一个UIComponent)。

它也不会让你的应用程序处于状态,例如最后点击哪个按钮/等等,因为你正在执行的逻辑片段的所有状态都被封装在命令中。

命令的简短伪代码

public class TestUICommand implements Command, RequiresContext {
    private var _context : UIComponent;
    private var _dialog : MyDialog;

    // Your command controller would set the reference to the button here.
    public function set context( cxt : UIComponent ) : void {
        _context = cxt;
    }

    public function execute() : * {
        _dialog = new MyDialog();
        _dialog.popup();
        _dialog.addEventListener( "yes", doYes );
        _dialog.addEventListener( "no", closeDialog);
    }

    private function doYes( event : Event = null ) : void {
        _context.setStyle("color", 0xFF0000);
        closeDialog();
    }

    private function closeDialog( event : Event = null ) : void {
        _dialog.close();
    }
}

答案 2 :(得分:1)

无需大量编码即可轻松完成此操作。假设你有一个不同的TitleWindow显示你想要变成红色的每个按钮,你只需让“想要变成红色”按钮从每个标题窗口中点击按钮的切换状态中断开他们的styleName。当然,您必须将TW按钮的切换属性设置为true =,然后获取其选定的属性。

示例:

<mx:Button styleName="{titleWindow_01.yesButton.selected ? 'redStyle' : 'plainStyle'}" text="Blah"/>

在你的TitleWindow中

<mx:Button id="yesButton" toggle="true" text="Yes"/>

这些按钮显然还有其他属性,但是如果没有大量编码,这可以让您轻松了解这是多么容易。绑定将自动发生,因此您甚至不必担心这一点。