侦听使用EventDispatcher类发送的事件

时间:2011-12-20 17:01:26

标签: actionscript-3 flex events actionscript

我创建了一个自定义事件类和一个EventDispatcher派生类。 我做了什么,是在我的EventDispatcher类中放入一些逻辑,然后调度自定义事件,问题是我无法从我的主应用程序中听取事件。

我有一个在主应用程序中创建和编辑的Arraycollection,而不是我想将它发送到EventDispatcher,并进行一些检查,而不是我想将我的ArrayCollection调度回主应用程序以使用Visual对象进行绑定

如果我的整个代码逻辑不正确,请告诉我[=

这是一些代码

EventDispatcher子类

public class LoadData extends EventDispatcher
{
    public var sendData:DataSender = new DataSender('DataLoader',dataList,true);
    private var dataList:ArrayCollection = new ArrayCollection();           
    dispatchEvent(sendData);
}

自定义事件类

public class DataSender extends Event {
    public var data:ArrayCollection = new ArrayCollection;
    public function DataSender(type:String, data:ArrayCollection, bubbles:Boolean=true, cancelable:Boolean=false)
    {
        super(type, bubbles, cancelable);
        this.data = data;
    }
}

主要应用

var DataEvent:LoadData = new LoadData(dataList);
addEventListener('DataLoader',datacapture);


public function datacapture(event:DataSender):void{
    check.dataProvider = event.data;    
}

2 个答案:

答案 0 :(得分:0)

您必须确保在实际收听事件之前未调度该事件。根据你的代码,调度事件的时间并不是很清楚。

如果不深入了解你的逻辑细节,你可能会做这样的事情,请注意我不推荐这个实现,只是说明我的答案!

    //In the LoadData Class
    public var sendData:DataSender = new DataSender('DataLoader',dataList,true);
    private var dataList:ArrayCollection = new ArrayCollection();   

    public function dispatch():void
    {
       dispatchEvent(sendData);
    }

    //In your Main App
    var dataEvent:LoadData = new LoadData(dataList);
    dataEvent.addEventListener('DataLoader',datacapture);
    dataEvent.dispatch();

答案 1 :(得分:0)

是的,你的代码很糟糕。首先,我建议您阅读面向对象编程。

然后看看这个:

public class LoadData extends EventDispatcher {

    public var sendData:DataSender;
    private var dataList:ArrayCollection;

    public function LoadData() {
        //This is the CONSTRUCTOR which is run when you do new LoadData()
    }

    //This function is called when you want to dispatch the event
    private function dispatch() {
        dataList = new ArrayCollection();           
        sendData = new DataSender('DataLoader',dataList,true);
        dispatchEvent(sendData);
    }

}

然后您的主应用程序是这样的:

var dataEvent:LoadData = new LoadData(dataList);
dataEvent.addEventListener('DataLoader', datacapture);

然后,每当调用dataEvent.dispatch()函数时,都将调用您的事件处理程序。