ActionScript 3.0 :: Dispatching Non-custom Events From Inside A Class??
Apr 3, 2009
Would it be possible for me to also dispatch non-custom events (like Event.CHANGE) from inside a class? I already did this with custom events which worked fine, but when I try to dispatch a the Event.CHANGE it will tell me that I am trying to convert a String into an Event (??). What I do is:[code]
I'm curious about event performance. I have a custom class that downloads files from a server and writes to your local system with AIR. This class has a few custom events that fire during a download process: File starts downloading, files finishes downloading, error occurred, progress, and a few others. This class was built for a specific project, but made coupled so it can be used for anything else wanting to download a file from a server. I'm starting to implement it into a new project, and a few events I'm not listening for, such as when the file starts downloading, or the progress of it, just the complete.
Does it strain overall performance having all the other events still dispatching, when I know they aren't being listened to? Would be be better to comment out the dispatchEvent() for the specifics I know aren't used, or does it even matter? There's obviously events dispatched throughout the SDK that aren't always listened for: Right click, drag, resize, etc. This makes me think it doesn't matter that these events fire but aren't handled, but since code is running and things are happening, that means there is performance going on.
Basically I am trying to create a string Validator which requests a new language from its controller by dispatching an event upon its creation.
The example below is a straight copy from the Flex3 component explorer - the only diffrence being that I have created the validator as a custom component which dispatches an event upon its creation.
The problem is that my main Application cannot hear the event being dispatched and I don't know why.
I think this is a pretty simply problem but I do not seem to be able to pull it off. Basically I have a parent class A, and a child class B.Class A instantiates class B with addChild.There is a shared object which is being updated from a java server (red5) that has an event listener attached to it in class A.I have a function in class A which will pass certain, specific updates from this shared object to class B.The problem occurs is that when class B is instantiated, the event listener from class A doesn't work anymore. I have not removed the event listener from A.?
I am able to get the result, but not able to dispatch the event from the custom actionScript class. I googled and got the riposte that you need to add it to display list.
I have a main application Planner.mxml. This view has a couple of custom components, one of which is LoginView.mxml. In LoginView.mxml I do the following:
protected function btnLoginClick(event:MouseEvent):void { try {
[code]....
As you can see, when the user is successfully logged in, I want to dispatch a custom event; if not, I show an alert box. However, this event doesn't dispatch (or at least, I don't know how to listen for it).
I would like to listen for it in my main application where I can then change my viewstate to the logged-in state. However, the event never seems to get there. I listen for it by having loggedIn="loggedInHandler(event)" on my loginComponent.
However, it seems to me as I've started building this (or trying, rather) that there's no way this can be done, but I'm sure I'm wrong. Since the static class is never added as an instance to the display list, the stage (or any object for that matter) will never hear any events it dispatches.I've searched and found this, but that doesn't seem to be the right solution since I'm listening for my custom LinkEvent event from the stage, and *not* in the class calling the dispatch function in the static dispatcher class.And to reiterate, the goal is to have a single class I can use throughout my application that dispatches my custom LinkEvent event with two properties: linkURL, and linkTarget.The whole reason for wanting to do this is so I can have some control over what happens (to track, or do some other behavior) when someone clicks on a link created within an htmlText TextField with an <a>
In a nutshell I have a custom event that I am dispatching from one class that is not getting picked up by the other class even though i have added the appropriate addEventListener calls on its constructor.Here's how the classes are laid out:
The NetworkManager class extends the MovieClip class as does the LoginScreen and Application classes as well.Now within the oLoginScreen class I dispatch the ValidateCredentialsEvent by calling it this way:
ActionScript Code: dispatchEvent (new ValidateCredentialsEvent(ValidateCredentialsEvent.VALIDATE_CREDENTIALS, oLoginData, true, false));
Then when I debug the code, I can step through and see that the ValidateCredentialsEvent is being generated but it is never picked up by the oNetworkManager class whatsoever.Is this occuring because the NetworkManager and LoginScreen classes are children of the Application class and because of this can't capture events raised by one another without using the Application class as the intermediary to redispatch these events? My whole idea here was to create a generic network managing object that could be called from anywhere within the application, by any object, using custom events.
When dispatching events in as3 I always have to extend class from sprite, or movieclip, but when I don't have display objects I don't wont to extend to sprite or movieclip. What is the most light class that I can extend, I mean no display object, and still do use event dispatching?
So I am able to dispatch the event from one class and trace out that the custom event was dispatched, but where I am having trouble is listening for that event in another class.
I have a custom Flex 4.5 component (to be used in a List) -
Game.mxml (represents a clickable playing table in a card game): <?xml version="1.0" encoding="utf-8"?> <s:ItemRenderer [code].......
But I never see the "game clicked: " trace. Does anybody please know why? I'm probably missing something minor, because I can see the "Clicked: 8946" trace.
I'm using ActionScript 3 in Flash Professional and I'd like my class to raise an event, not a custom event but an existing one. I've set up my class so that it extends EventDispatcher. In the documentation [URL] the example declares a custom event by adding a static String variable: class CustomDispatcher extends EventDispatcher { public static var ACTION:String = "action";
I assume that enables: dispatcher.addEventListener(CustomDispatcher.ACTION, actionHandler); Or at least auto-complete when you've typed 'dispatcher.addEventListener(' into the Flash Professional IDE.
But lots of classes that raise events raise a mixture of existing noncustom events. For example if you have an instance of a flash.netFileReference and type fileRef.addEventListener(
A long list of potential events to listen for is given including DataEvent.UPLOAD_COMPLETE_DATA, Event.SELECT, HTTPStatusEvent.HTTP_STATUS, SecurityErrorEvent.SECURITY_ERROR, etc.
If I want my class to be registered to raise those existing events, what code do I need? Preferably so that the IDE knows instances of my class may raise the event and suggests them in the addEventListener auto-complete/intellisense list.
I have made a site in AS3.0 code and it's working fairly well but theres alot of things i'm trying to update to make the code a little more reusable. For startersI have a function that creates a little pop-up text when I roll over a button. The text is a class that I created in the Flash IDE instead of dynamically drawing it with actionscript.Here is the code for the pop up text instance called "enter_text" as it rolls over the movie clip "preloader_mc"
Code: //add listeners to the preloader_mc movie clip on stage preloader_mc.buttonMode=true;
I have an <mx:Application> which contains a <mx:Module>. This module has several child modules. It also has some an instance of a class I have created. I am trying to have a method of this class dispatch an event that can be "heard" by the module and handled. This isn't happening.To be more clear, I am using 'dispatchEvent' to from inside a class method.There is an instance of this class in: mx.core.Application.myapplication.mymodule.myclassIt is the 'myclass.somefunction' that dispatches the event. I have a listener registered in 'mymodule'. Nothing happens when the function/method runs, however.
I came to some misunderstanding how to use events. LOL. I thought I understand it but as I see I dont.
I've got a Engine document class where Hero is added, and Cannon object too. In body of Hero I need to dispatch event when Hero reaches some point or particularly a pitfall, so I've got static const string to handle it:
[Code]...
but this way I would end up with dozens of handlers in the Engine body class, and I am trying to minimize this class as it is big enough without those handlers. I am stunned and suprised, and I am noob again. Maybe someone will clear out how to get custom events working/... and why only instance of object that dispatches an Event can hear it (my case).
I'm having a problem with a custom subclassed Event class. Or I should say, I'm having trouble receiving events from this custom event class. I'm pretty sure I have everything wired correctly, the event is dispatched properly and my trace shows the Event instance being spawned. However, my eventListener, which is in another class, never fires its handler function.Have any of you run across instances where custom event classes fail to fire? I'm about at my wit's end.
I am curious in what strategies people are using (if they are using) the Key events inside of their classes. I am trying to build up a character class and I wanted to encapsulate the movement inside of the class.
Im trying to dispatch and event from an XML class.dispatchEvent(new Event (XMLClass.INDEX_CHANGED));and catch it in the display class [code]I know that im missing something because the application works and the function runs but its not dispatching the event the event or maybe it's not catching the event in the display class, even though everything else is working and im not gettin' any errors.
I have been trying to get a grasp on dispatching events and have a few questions I am hoping you will all be nice enough to clearify for me.
Do I have to have a custom Event class to dispatch a custom event?
If so do I have to create a new intance of the event each time I want to dispatch an event. Example:
dispatchEvent(new MyEvent(MyEvent.TASK_COMPLETE)); or can I just dispatch an event once an instance has already previously been created.... example: dispatchEvent(MyEvent.TASK_COMPLET);?
I have a custom event class public class FFTDrawEvent extends Event {
public static const DRAW_EVENT:String = "drawEvent"; private var _param:Array = new Array(); public function FFTDrawEvent(type:String, __param:Array, bubbles:Boolean=true, cancelable:Boolean=false) { _param = __param; super(type, bubbles, cancelable);
[Code]...
Both class (Dispatcher & Listener) are Child class of a MXML application. Also listen to the event in the parent MXML application doens't work. Listen to the event in the dispatching class itself somehow works.
I have to feeling that the EventDispatcher class is not the right one to dispatch events to a mxml application or respectivly AS classes, which extend/inherent from a MXML component class.
I want to have a main logic class that listens for dispatched events from an assortment of other classes.
for instance: i have a parent Map class that contains X instances of a State class. When the user clicks on a State class, i want to dispatch an event CLICKED along with the name of the state.
now this Logic class will see this new event and process the name of the state and perform some other logic stuff. no matter what i try i can only get it to work where the State class listens for its own Dispatched event. Which to me seems a waste, i could have just manually called the function.
I have read so many tutorials online about custom events/ dispatching and they are being used in a basic one class example.
I have a key.addlistener setup to listen to key events.What I want to be able to do is to dispatch key events by for example a mouse click or just on load. I've tried a lot of possible solutions such as dispatchEvent with type as "onKeyDown" and "keyDown" etc.... but key listener simply do not treat it as a keyboard event.
I'm creating a custom class to retrieve some data using URLoader.My code is below, doing this from memory, plz ignore any minor typos.The challenge I'm encountering: when my custom class calls the loader, the event handler takes over. At which point the context of my code leaves the function and it's not clear to me how I then return the data retrieved by the loader. I sense that I'm breaking the rules of how ActionScript really runs by putting a loader in a separate class; at least, that's my primitive understanding based upon the reading I've done on this.So can I do this? I am trying to create a clean separation of concerns in my program so that my main program doesn't get clogged up with code concerned with retrieving remote data.
I have problems dispatching events from an external swf file.
The class that loads the file only receives the original events of actionscript (for example MouseEvent.CLICK, etc) and ignores others that are dispatched with a own event class or dispatched with a direct string in the type parameter. For example:
is it possible to send data to starling object after var mStarling:Starling = new Starling(StarlingClass, stage); or maybe dispatching event from main class and then listening event in starling class.
If i have a html menu, how can i call events within a swf on the same page.?IS this done with java or php?exact example is being used hereclick the nav and see the flash banner change
I am dispatching two different events showbutton and removebutton from the code inside the LOADED SWF.on main file, (the one that is loading the swf file) i m listening for events and either showing or removing the buttons based on proper scenario. Here is he error i m getting.
ERROR 1180 Call to a possibly undefined Method Event - - - > dispatchEvent(new Event("showbutton"));
I am attempting to dispatch an event on the click of any of the buttons in a button array in the document class of my application. The intent is to have an external object receive this dispatch so as to remove a listener for the EnterFrame event in this class.
Here is the Main.as code (document class): Code: package { import flash.display.*; import flash.events.*; public class Main extends Sprite { private var one:MovieClip; [Code] .....
`i'have a problem with listening events dispatching from their child classes. for example i have contentManager object which is controlling content at the top level of stage. it has a imageGallery object and in the imageGallery objectthere ise a collectionLoader object which is loading images.
now i want to add one preloader to contentManager which always listen for ProgressEvent. when the progressEvent dispatched i want to preloader going to active. becouse there is another objects that are loading images or other kind of files. i think it is a good apporach to solve preloader issue. so my problem is, when collectionLoader object loading images with using queLoader. my QueueProgress event dispatches ProgressEvent evey time, but my preloader object stand at the 2 classes up level, doesn't percive this event.
I have a key.addlistener setup to listen to key events. What I want to be able to do is to dispatch key events by for example a mouse click or just on load. I've tried a lot of possible solutions such as dispatchEvent with type as "onKeyDown" and "keyDown" etc.... but key listener simply do not treat it as a keyboard event.
Code: var eventObj = new Object(); eventObj.type = "keyDown"; eventObj.code = 13; eventObj.ascii = 'e'; dispatchEvent(eventObj);