I think Matthew has what you are looking for. Alain's solution should
do what you want too.
If you want to write two classes with lower cohesion so they aren't
referencing each other, you could write a third control class which
would have code similar to the following. This way objA and objB don't
need to know about each other. If another class needs to start
listening for results of the webservices, you add it in here, rather
than making changes to your other classes.
Class controller {
Var objA = new ClassA();
Var objB = new ClassB();
this.eventComboBoxChanged = function(){
// execute functions on B
}
this.eventWebserviceResultsRecieved = function(){
// execute fuctions on B
}
this.eventDataRequested = function(){
// execute functions on A
}
objA.addEventListener("eventComboBoxChanged", this);
objA.addEventListener("eventWebserviceResultsRecieved", this);
objB.addEventListener("eventDataRequested", this);
}
Again, I haven't tested this code, but the basic idea should work as
long as objA and objB are dispatching the events when the changes occur.
~Dan
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Matthew
Ganz
Sent: Friday, February 16, 2007 1:48 PM
To: Flashcoders mailing list
Subject: Re: [Flashcoders] Events for custom classes?
do you have a reference to the class that is broadcasting the event in
the
class that's listening for the event?
meaning, when you write your addEventListener in your Receiving class,
you
should have:
referenceToBroadcastingClass.addEventListener("myEvent",myHandler);
----- Original Message -----
From: "Merrill, Jason" <[EMAIL PROTECTED]>
To: "Flashcoders mailing list" <[email protected]>
Sent: Friday, February 16, 2007 2:35 PM
Subject: RE: [Flashcoders] Events for custom classes?
> Daniel, try as I may, I can't get your code to work. I have one
class,
> which has a combobox. I can get the event to fire when the combobox
> changes just fine, but I can't get it to "hear" the firing of the data
> capture from the webservice in the other class.
>
> So basically, in pseudocode, I need to do this:
>
> class A{
> make comboBox
> make datagrid
> when comboBox changes, use Class B
> to get data from webservice
> when webservice result received,
> update datagrid with new data
>
> }
>
> class B{
> connect to webservice
> when requested, return data to requesting class
> }
>
> Reason I want these two classes to be separate is because I want other
> classes to call Class B to get data as well. So, I can do all of
those
> things just fine, they are all working, except for the last part,
"when
> requested, return data to requesting class" - I figure since the
> webservice is asynchronous, I need to capture the received event,
which
> is fine, I can do, that works. But I need to tell Class A to update
the
> datagrid with the new data when it gets it from Class B - so an event
> model is required.
>
> in your code, you have a var r in both the "Class A" and "Class B" -
I'm
> confused about that. Thanks for any help.
>
>
> Jason Merrill
> Bank of America
> Learning & Organizational Effectiveness
>
>
>
>
>
>
>
>>>-----Original Message-----
>>>From: [EMAIL PROTECTED]
>>>[mailto:[EMAIL PROTECTED] On Behalf
>>>Of Holth, Daniel C.
>>>Sent: Friday, February 16, 2007 10:36 AM
>>>To: Flashcoders mailing list
>>>Subject: RE: [Flashcoders] Events for custom classes?
>>>
>>>
>>>Here is your code modified to use the EventDispatcher:
>>>
>>>import mx.events.EventDispatcher; // import the event dispatcher
>>>
>>>class com.boa.projects.iqrcgenerator.components.AdminData{
>>> public var addEventListener:Function; // Set the functions
>>> public var removeEventListener:Function; // Set the functions
>>> private var dispatchEvent:Function; // Set the functions
>>>
>>> private var userData:Object;
>>>
>>> // I'm sure you have a different constructor, but you need
>>> // to add that line to it if you want to use the eventdispatcher
>>> public function AdminData(){
>>> mx.events.EventDispatcher.initialize(this); //
>>>add this to constructor
>>> }
>>>
>>> public function wsUserDataByLOB(lobDbId:Number):Void{
>>> var getUserListResult:Object = new Object();
>>> getUserListResult =
>>>generatorWebService.GetUserList(lobDbId);
>>>
>>> var r = this; // To get this in onResult
>>> getUserListResult.onResult = function(oUser){
>>>
>>> r.dispatchEvent({type:"eventOnResult",
>>>user:oUser}); // Dispatch the event
>>>
>>>
>>> }
>>> }
>>>
>>>
>>> // I may just take this function out all together since
>>>the event can
>>> // autommatically send them the data.
>>> public function getUserData():Object{
>>> return userData;
>>> }
>>>}
>>>
>>>
>>>Then in your other class you can do something like:
>>>
>>>//myAdminData is an instance of the class above
>>>
>>>var r = this;
>>>r.eventOnResult= function(evtObj:Object){
>>> trace("user: " + evtObj.user); // Should return the
>>>oUser object } // addEventListener takes the event name, and
>>>who you want to listen
>>>myAdminData.addEventListener("eventOnResult", r);
>>>
>>>
>>>
>>>Does that help? I obviously can't test the code, but I think
>>>everything is right... I have trouble with scope, which is
>>>why I use a lot of 'r'
>>>values instead of 'this'... Just easier for me... Probably
>>>not a good coding standard :)
>>>
>>>-Dan
>>>
>>>-----Original Message-----
>>>From: [EMAIL PROTECTED]
>>>[mailto:[EMAIL PROTECTED] On Behalf
>>>Of Merrill, Jason
>>>Sent: Friday, February 16, 2007 9:03 AM
>>>To: Flashcoders mailing list
>>>Subject: [Flashcoders] Events for custom classes?
>>>
>>>OK, I'm pretty good at Actionscript 2.0, but something I
>>>never really understood and now need to.
>>>
>>>Core question: How do I make an event in a custom class, and
>>>how do I make a listener in another class listen for the event?
>>>
>>>
>>>EventBroadcaster in the help docs seems to only show how to
>>>use it with Adobe classes and components. Docs on listener
>>>are the same. I know how to set up listeners for other
>>>events, like keypresses and mouse rollovers. Easy enough.
>>>But my problem is this (see comments in code
>>>below):
>>>
>>>class com.boa.projects.iqrcgenerator.components.AdminData{
>>>
>>>
>>> private var userData:Object;
>>>
>>> public function wsUserDataByLOB(lobDbId:Number):Void{
>>> var getUserListResult:Object = new Object();
>>> getUserListResult =
>>>generatorWebService.GetUserList(lobDbId);
>>> getUserListResult.onResult = function(oUser){
>>> //this works fine,
>>>
>>> //I can capture this event result here,
>>> //but how do I notify another class?
>>> //also what about scope here?
>>> //how to set userData as oUser result?
>>> //can I fire an event in my AdminData
>>> //class from here?
>>> }
>>> }
>>>
>>>
>>> public function getUserData():Object{
>>> //can't let user get this data
>>> //until Webserive event is done.
>>> return userData;
>>> }
>>>}
>>>
>>>Thanks,
>>>
>>>
>>>Jason Merrill
>>>Bank of America
>>>
>>>Learning & Organizational Effectiveness
>>>
>>>
>>>
>>>
>>>_______________________________________________
>>>[email protected]
>>>To change your subscription options or search the archive:
>>>http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>>>
>>>Brought to you by Fig Leaf Software
>>>Premier Authorized Adobe Consulting and Training
>>>http://www.figleaf.com http://training.figleaf.com
>>>
>>>This e-mail and its attachments are intended only for the use
>>>of the addressee(s) and may contain privileged, confidential
>>>or proprietary information. If you are not the intended
>>>recipient, or the employee or agent responsible for
>>>delivering the message to the intended recipient, you are
>>>hereby notified that any dissemination, distribution,
>>>displaying, copying, or use of this information is strictly
>>>prohibited. If you have received this communication in error,
>>>please inform the sender immediately and delete and destroy
>>>any record of this message. Thank you.
>>>_______________________________________________
>>>[email protected]
>>>To change your subscription options or search the archive:
>>>http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>>>
>>>Brought to you by Fig Leaf Software
>>>Premier Authorized Adobe Consulting and Training
>>>http://www.figleaf.com http://training.figleaf.com
>>>
> _______________________________________________
> [email protected]
> To change your subscription options or search the archive:
> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>
> Brought to you by Fig Leaf Software
> Premier Authorized Adobe Consulting and Training
> http://www.figleaf.com
> http://training.figleaf.com
_______________________________________________
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com
This e-mail and its attachments are intended only for the use of the
addressee(s) and may contain privileged, confidential or proprietary
information. If you are not the intended recipient, or the employee or agent
responsible for delivering the message to the intended recipient, you are
hereby notified that any dissemination, distribution, displaying, copying, or
use of this information is strictly prohibited. If you have received this
communication in error, please inform the sender immediately and delete and
destroy any record of this message. Thank you.
_______________________________________________
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com