【问题标题】:Return value from class that has event: ADDED_TO_STAGE从具有事件的类返回值:ADDED_TO_STAGE
【发布时间】:2015-06-27 01:46:55
【问题描述】:

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

我的班级:http://sudrap.org/paste/text/555684/

编辑:我将在课堂上创建一些按钮。我希望按钮的功能返回一些值。我需要知道点击了哪个按钮。我想将这些值传递给主 fla。

我可能需要该类为对话框中指定的设置返回一个数组。

【问题讨论】:

  • 我没有看到您试图在代码中的任何位置返回值(DrawRectangle 除外,但这似乎无关?)。你想什么时候退货?当您创建类的对象时?请改写您的问题以使其更清楚。也没有理由将您的代码放在场外。
  • 想要返回值或传递一些参数?您要返回的类型是什么?出于什么目的?
  • 感谢您的回答。我编辑了这个问题。我没有将代码粘贴到此问题中,因为该站点由于代码过多而不允许这样做。

标签: actionscript-3 flash-cc


【解决方案1】:

您可以通过创建扩展 Event 并在其中传递所需参数的自定义事件类来做到这一点。

    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 类上添加一个侦听器

    this.addEventListener(CustomEvent.PASS_PARAMS, onProcessedEvent);       
    private function onProcessedEvent(e:CustomEvent):void{
        trace(e.btnName);
    }

【讨论】:

  • 你好,我不知道把你的第二个代码块放在哪里,但是当我在这个问题中把它放到我的班级时,我收到了错误:sudrap.org/paste/text/556048
  • 我很困惑。我将您的第一部分和第二部分代码移到了我的班级,将第三部分移到了我的主要课程中。 CustomEvent.as: sudrap.org/paste/text/556089 main fla: sudrap.org/paste/text/556092 现在我收到错误 1061。
  • CustomEvent 是一个类,它继承了 Event 类的所有属性和方法。保持独立。
  • 哇!我照你说的做了,改变了 dispatchEvent(new Event(CustomEvent.PASS_PARAMS, e.target.name)); TO dispatchEvent(new CustomEvent(CustomEvent.PASS_PARAMS, e.target.name));然后它就像一个魅力。非常感谢。
【解决方案2】:

一般来说,您所拥有的是 view。 用户可以与之交互的视觉对象。

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

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

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

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

获取或设置要查看的项目列表的数据模型。一个数据提供者可以被多个基于列表的组件共享。对数据提供者所做的更改立即可供使用它作为数据源的所有组件使用。

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

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

【讨论】:

  • 加一个以获得详细答案。多谢。如果可行,我会尝试并将此答案标记为已接受。
猜你喜欢
  • 2013-04-30
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
相关资源
最近更新 更多