Solved

this , in an event dispatch

Posted on 2009-05-16
4
259 Views
Last Modified: 2013-11-11
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

0
Comment
Question by:moshem
  • 3
4 Comments
 
LVL 19

Expert Comment

by:Gary Benade
ID: 24405987
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
 
LVL 1

Author Comment

by:moshem
ID: 24426956
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
 
LVL 19

Accepted Solution

by:
Gary Benade earned 500 total points
ID: 24429025

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
 
LVL 19

Expert Comment

by:Gary Benade
ID: 24429029
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Stock Videos 17 325
Stop Ads in Browser Google Chrome 3 536
Can't find all of the preferences on Flash Pro 2 483
High definition conversion videos in YouTube 12 280
I come across a lot of question about how to access things in the document class from a movieclip, or accessing something from a movieclip in the document class. It took me a while to figure this out but once I did it makes life so much easier. …
While working over numerous projects I often had the requirement for doing a screen capture in AS3.0. Unfortunately I found no "ready made" solutions in google search that suited my requirements. But I did come across some great resources which help…
The goal of the tutorial is to teach the user how to how to record live broadcast.
The goal of the tutorial is to teach the user how to select which audio input to use. Once you have an audio input plugged into the laptop or computer, you will go into the audio input settings and choose which audio input you want to use.

910 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now