?
Solved

this , in an event dispatch

Posted on 2009-05-16
4
Medium Priority
?
266 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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 2000 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

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Here are some practices and techniques that can be adopted into your Flash/Flex application development process. Note: Not all "performance tips" provide an immediately-recognizable benefit.   This article does not include timing validation data,…
I have been doing hardcore actionscripting for some time; and needless to say I have faced a lot of problems in just understanding others' code rather than understanding what the code executes. A programmer's life can become hell when there are a lo…
In this tutorial viewers will learn how to create a basic motion tween animation in Flash Open a new document in Flash: Draw/import an image: Press CTRL + F8 to convert it into a graphic symbol: Select a frame (how long you want the tween to last): …
The goal of the tutorial is to teach the user how to live broadcast using Flash Media Live Encoder and connecting it to YouTube to broadcast. Log into your Youtube account, choose live stream settings, start live stream from Flash Media Live Enc…
Suggested Courses

752 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