Return 来自 class 的值具有以下事件:ADDED_TO_STAGE

Return value from class that has event: ADDED_TO_STAGE

我有一个 class 和 ADDED_TO_STAGE 事件(这是一个不完整的对话框),我希望它成为 return 一个值。这可能吗?或者我应该遵循什么方式?

我的class:http://sudrap.org/paste/text/555684/

编辑: 我将在 class 中创建一些按钮。我想要按钮的功能 return 一些值。我需要得到点击了哪个按钮。我想将这些值传递给 main fla。

我可能需要 class 到 return 对话框中指定设置的数组。

一般来说你有一个view。 用户可以与之互动的视觉效果。

您应该在 class 中定义您的 view。显然您想将一堆组合框和复选框传递给您的 class。 这是不是的方法。

组合框和复选框本身就是视图。它们也称为组件(因为它们提供额外的功能,如样式等)。 如果您的弹出窗口应该由组合框和复选框组成,那很好。 在 class PopupDialog 中创建它们,但不要将它们传递给 class.

您应该传递给 class 的是 model,即用户应该能够修改的数据。

在 Flash 组件领域,这是一个 DataProvider 对象。 看看 description of the .dataProvider property of the ComboBox class:

Gets or sets the data model of the list of items to be viewed. A data provider can be shared by multiple list-based components. Changes to the data provider are immediately available to all components that use it as a data source.

如您所见,modeldataProvider 包含一些数据。 它是一个对象,由显示相同数据的所有视图共享。 一旦以任何方式操纵此数据,所有其他 views 都会收到该更改的通知。

我希望你能看到这如何解决你的问题:你的 view 是否是弹出窗口并不重要。只要它在与应用程序的其余部分共享的 model 上运行,return 值的功能就已经存在。

您可以通过创建扩展 Event 并在其中传递所需参数的自定义事件 class 来实现。

    package{
    import flash.events.Event;
    public class CustomEvent extends Event{

        public static const PASS_PARAMS:String = "passParams";

        // Your custom properties.
        public var btnName:*;

        public function CustomEvent(type:String, bName:*, bubbles:Boolean=false, cancelable:Boolean=false):void {
            this.btnName = bName;
            super(type, bubbles, cancelable);
        }

        override public function clone():Event{
            return new CustomEvent(type,btnName, bubbles, cancelable);
        }
     }
   }

并在按钮点击事件发生时调度你的customEvent

    btn.addEventListener(MouseEvent.CLICK, onBtnClick);
    private function onBtnClick(e:MouseEvent):void{
        dispatchEvent(new Event(CustomEvent.PASS_PARAMS, e.target.name));
    }

并在您的 Main class

上添加一个侦听器
    this.addEventListener(CustomEvent.PASS_PARAMS, onProcessedEvent);       
    private function onProcessedEvent(e:CustomEvent):void{
        trace(e.btnName);
    }