this , in an event dispatch

Hi,

Imagine I have an FLA with a movieclip and inside it there is another movieclip called button_mc, the main movieclip is associated with class a.


for class a II will write an external class, which goes something like the one attached.

when button_mc.on_release is dispatched the event handler can use the class variables or call to a class function..

the problem is the this keyword now relates to button_mc inside the event handler and even inside the class functions that get called by button_mc.onRelease..

this takes out the benefit of using the this keyword and makes the code invalid.... since it is wrongly addresses another movieclip then the one intended to...

the only solution I found was to replace the this keyword with an absolute addressing... but that is ugly..

what is the correct way to handle this ?
class a extends movieclip
{
	private var var1:Number
 
 
	function a ()
	{
		this.button_mc.onRelease = _handle_button_mc_onRelease;
	}
	
	function a2 (n)
	{
		this.var1 = n;
	}
	
	function _handle_button_mc_onRelease ()
	{
		// this wont work anymore
		
		var i = this.var1;
		
		// this call will not work and even if it did
		// a2 inner code would not work because of the 
		// this keyword
		
		this.a2 (i);
	}
}

Open in new window

LVL 1
moshemAsked:
Who is Participating?
 
Gary BenadeConnect With a Mentor Commented:

import mx.utils.Delegate;
 
class a extends movieclip
{
        private var var1:Number
 
 
        function a ()
        {
                this.button_mc.onRelease = Delegate.create(this, _handle_button_mc_onRelease);
        }
        
        function a2 (n)
        {
                this.var1 = n;
        }
        
        function _handle_button_mc_onRelease ()
        {
                // this now points to the classes scope thanks to Delegate
                
                var i = this.var1;
                
                this.a2 (i);
        }
}

Open in new window

0
 
Gary BenadeCommented:
I never did like the way AS2 event handlers work, AS3 acts as you would expect
class a extends movieclip
{
	private var var1:Number =1;
 
 
	this.button_mc.onRelease = _handle_button_mc_onRelease;
	
	
	function a2 (n)
	{
		this.var1 = n;
	}
	
	function _handle_button_mc_onRelease ()
	{
		var i = var1;
		a2( i+1);
		trace( i); // 1
		trace(var1); // 2
	}
}

Open in new window

0
 
moshemAuthor Commented:
so that's it ?

AS2 behave just like this and creates a mess of events ?

what's the workaround ? what is the recommended way to handle this ?

(except for moving to AS3) - this is a problem since I need to teach the designers to know to add simple onrelease event handlers first..
0
 
Gary BenadeCommented:
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.