0

我正在开发一个先进的模块化 GUI 系统。我需要它尽可能灵活,并希望对尽可能多的人有用(但是它将是合理的利基)。

我的设计中让我思考的部分是每个组件应该如何最好地与应用程序的其余部分交互。

我看到两种方法:

  1. 传入一个 setter 的类和名称,组件应该对其进行操作。如果需要,这仍然允许从 setter 内分派事件。
  2. 传入组件应调度的 CustomEvent 以及相关数据。虽然我觉得这可能会导致大量的事件监听器,以及额外的复杂性。

但是什么是最佳实践?各自的优缺点是什么?有没有更好的方法?

  1. 基本示例:

    public class Button extends Sprite
    {
    private var _property:String;
    private var _object:*;
    
    public function Button(label:String, object:*, property:String) 
    { 
        _property = property;
        _object = object;
        addEventListener(MouseEvent.CLICK,  onClick);
    } 
    
    private function onClick(e:MouseEvent):void
    {
        _object[_property] = "Changed";
    }
    
    }
    
  2. 基本示例:

    public class Button extends Sprite
    {
    private var _event:GuiEvent;
    
    public function Button(label:String, event:GuiEvent) 
    {
        _event = event;
        addEventListener(MouseEvent.CLICK,  onClick);
    }
    
    private function onClick(e:MouseEvent):void
    {
        dispatchEvent(new GuiEvent(_event.type, "Changed"));
    }
    
    }
    
4

2 回答 2

0

如果您希望您的 GUI 框架对所有人有用,您应该使用标准事件而不是发明新事件。第二种选择是要走的路,但你应该尽量保持简单。您在示例 2 中编写的代码看起来非常复杂。它可以简单地写成这样:

public class Button extends Sprite
{

    public function Button(label:String) 
    {
    }

}

然后任何人都可以使用他们知道的事件来处理点击:

button.addEventListener(MouseEvent.CLICK, onClick);
于 2012-04-12T09:51:08.840 回答
0

有点题外话,并不能真正回答您的问题:

为什么要重新创建已经存在的东西?已经有经过验证的带有 GUI 组件的库。

例如,以 AS3 Temple Library
http://code.google.com/p/templelibrary/

它具有所有类型的表单元素组件;复选框、单选按钮、组合框、输入字段、文件字段、滚动组件、日期选择器、(步骤)滑块、列表、滚动条、自动完成字段和所有类型的按钮。它还有一个 Form 类,它有助于验证,将数据传递给任何类型的服务。它还可以正确管理 tabindexes,所有控件也可以与键盘一起使用,就像每个人都希望它工作一样。还有用于样机的代码组件,但您可以使用相同的代码通过库项目、时间线或任何您想要的方式对其进行样式设置,并具有无穷无尽的创造力。大多数 gui 组件都经过设计,因此可以对其进行扩展以满足您的需求。

大多数 gui 组件都使用普通的事件监听器(大多数在内容更改时调度 Event.CHANGE),在大多数情况下,不需要将其包装到新类型的事件中。

于 2012-04-13T11:57:36.270 回答