我有一个架构/逻辑问题。这就是我想要实现的目标:
我的问题是什么是“记住”点击了哪个按钮并处理是/否问题的最佳/最简单方法。
解决方案:
a)创建一个id为的变量 在主要点击的按钮 应用程序并在中设置一个公共变量 该ID的组件
b)然后在其中制作自定义事件 处理是/否的组件 题。自定义事件将使用 按钮id作为参数并发送 回到主应用程序。
有更好/更简单的方法吗?我接近它了吗?将按钮ID“发送”到组件中然后再次退出是否有意义?
谢谢。
-Laxmidi
答案 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"/>
这些按钮显然还有其他属性,但是如果没有大量编码,这可以让您轻松了解这是多么容易。绑定将自动发生,因此您甚至不必担心这一点。