Because you introduced the Vbox container.  Neither the button or the
moduleloader are children of modulestile, they are children of the Vbox.

 

You now need to keep references to the Vbox instead, and remove that.

 

Tracy

 

________________________________

From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of sailorsea21
Sent: Friday, October 17, 2008 3:21 PM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] Re: sailorsea21 - RemoveChild question.

 

Thanks Paul, that fixed the error in my file but I still receive the 
error when I run my application, load modules and then try to unload 
a loaded module. 

Error:

ArgumentError: Error #2025: The supplied DisplayObject must be a 
child of the caller.
at flash.display::DisplayObjectContainer/removeChild()
at 
mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::$remo
<http://www.adobe.com/2006/flex/mx/internal::$remo> 
veChild()[E:\dev\3.1.0
\frameworks\projects\framework\src\mx\core\UIComponent.as:5074]
at mx.core::Container/removeChild()[E:\dev\3.1.0
\frameworks\projects\framework\src\mx\core\Container.as:2267]
at content_module_template_blank/unloadclick()
[C:\Inetpub\wwwroot\LWY\UI\UI Score\UI Score 004
\src\content_module_template_blank.mxml:39]

Thanks.

--- In flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com>
, "Paul Andrews" <[EMAIL PROTECTED]> wrote:
>
> 
> ----- Original Message ----- 
> From: "sailorsea21" <[EMAIL PROTECTED]>
> To: <flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com>
>
> Sent: Friday, October 17, 2008 8:01 PM
> Subject: [flexcoders] Re: sailorsea21 - RemoveChild question.
> 
> 
> > Here's my updated code:
> >
> > private var moduleloader:ModuleLoader;
> > private var unload_button:Button;
> > private var vbox:VBox;
> > private var _aChildren:Array=[];
> >
> > private function unloadclick(event:Event):void
> > {
> > var iIndexClicked:int = parseInt(event.target.id);
> > modulestile.removeChild(_aChildren[iIndexClicked]);
> > *error* modulestile.removeChild(event.target); 
*error*
> 
> modulestile.removeChild(DisplayObject(event.target));
> 
> 
> > }
> >
> > public function AddColumnGraphPanel():void
> > {
> > var iNewIndex:int = _aChildren.length;
> > vbox = new VBox();
> > modulestile.addChild(vbox);
> > moduleloader = new ModuleLoader();
> > moduleloader.url = "test.swf";
> > _aChildren[iNewIndex] = vbox.addChild(moduleloader);
> > unload_button = new Button();
> > unload_button.id = String(iNewIndex);
> > unload_button.label = "unload";
> > unload_button.addEventListener(MouseEvent.CLICK, unloadclick);
> > vbox.addChild(unload_button);
> > }
> >
> > <mx:Tile id="modulestile" direction="horizontal">
> > </mx:Tile>
> >
> > I have the following error in the script:
> > 1118: Implicit coercion of a value with static type Object to a
> > possibly unrelated type flash.display:DisplayObject.
> 
> Quite right too..
> 
> >
> > Thanks again :)
> >
> > -David
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > --- In flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> , "Tracy Spratt" <tspratt@> 
wrote:
> >>
> >> That is correct, you are not storing references correctly. 
First I
> > will
> >> explain what is wrong with your code, but then, after seeing what
> > you
> >> are trying to do, will suggest a slightly different approach.
> >>
> >>
> >>
> >> First, you are mixing Array, which is accessed by index
> > and "associative
> >> array", which is an Object and accessed by property name:
> >>
> >> private var _oChildren:Object = new Object();
> >>
> >>
> >>
> >> Second, you are creating a new instance of that each time you 
click
> >> addModule. This overwrites what was in there before. Don't do
> > that.
> >>
> >>
> >>
> >> Third, you need a unique name for each reference you add to the
> >> associative array. Don't use "one" every time, that just puts a 
new
> >> reference in the "one" property. You can use anything you want 
for
> > this
> >> property name. Pick something that is meaningful. How will you
> >> identify which child you want to remove? Is it purely numerical?
> > If so
> >> you can use "1", "2", etc. Usually there is some string that is
> > logical
> >> for this, like an id, or an image's base file name. whatever,
> > remember
> >> it must uniquely identify the instance you want to later remove.
> >>
> >>
> >>
> >> Now, after looking at your code a bit more, and seeing that you 
do
> > not
> >> have a clear string or id you can use for identifying the
> > references, I
> >> am gong to suggest a different approach.
> >>
> >> private var _aChildren:Array= []; //declare an
> > initialize
> >> an Array
> >>
> >>
> >>
> >> ...
> >>
> >> public function addModule():void {
> >> var iNewIndex:int = _aChildren.length; //this will be the next
> >> available index in the array
> >>
> >> button = new Button();
> >>
> >> button.id = String(iNewIndex); //NOTE: you can NOT use this 
id
> > as a
> >> reference, but you CAN access its value
> >> button.label = "unload";
> >> button.addEventListener(MouseEvent.CLICK, onClickUnload);
> >> tiletest.addChild(button);
> >>
> >> moduleloader = new ModuleLoader();
> >> moduleloader.url = "test.swf";
> >> _aChildren[iNewIndex] = tiletest.addChild
(moduleloader); //NOTE:
> > the
> >> associated button id property value matches the index of the 
array
> > ref
> >> }// addModule
> >>
> >>
> >>
> >> private function onClickUnload (event:Event):void {
> >> var iIndexClicked:int = parseInt(event.target.id);
> >>
> >> tiletest.removeChild(_aChildren[iIndexClicked]);
> >> tiletest.removeChild(event.target);
> >> }// onClickUnload
> >>
> >>
> >>
> >> Try this. it is untested.
> >>
> >>
> >>
> >> Tracy
> >>
> >>
> >>
> >> ________________________________
> >>
> >> From: flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> 
> > [mailto:flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> ] On
> >> Behalf Of sailorsea21
> >> Sent: Friday, October 17, 2008 11:45 AM
> >> To: flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com> 
> >> Subject: [flexcoders] Re: sailorsea21 - RemoveChild question.
> >>
> >>
> >>
> >> Hi Tracy,
> >>
> >> I don't think I'm successfully storing the reference of the
> > children
> >> into the array.
> >>
> >> This is what I had tried:
> >>
> >> private var moduleloader:ModuleLoader;
> >> private var button:Button;
> >> private var _aChildren:Array;
> >>
> >> private function click(evt:MouseEvent):void {
> >> tiletest.removeChild(_aChildren["one"]);
> >> tiletest.removeChild(button);
> >> }
> >>
> >> public function AddModule():void {
> >> moduleloader = new ModuleLoader();
> >> moduleloader.url = "test.swf";
> >> button = new Button();
> >> button.label = "unload";
> >> button.addEventListener(MouseEvent.CLICK, click);
> >> tiletest.addChild(button);
> >> _aChildren = new Array();
> >> _aChildren["one"] = tiletest.addChild(moduleloader);
> >> }
> >>
> >> But I keep getting the "ArgumentError: Error #2025: The supplied
> >> DisplayObject must be a child of the caller." error.
> >>
> >> Thanks again.
> >>
> >> -David
> >>
> >> --- In flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com>  <mailto:flexcoders%
> > 40yahoogroups.com>
> >> , "Tracy Spratt" <tspratt@> wrote:
> >> >
> >> > Well, you did not do what I suggested.
> >> >
> >> >
> >> >
> >> > What do you think is in "moduleloader" when you click the 
remove
> >> button?
> >> > The last thing you put in it.
> >> >
> >> >
> >> >
> >> > Re-read my response.
> >> >
> >> >
> >> >
> >> > Tracy
> >> >
> >> >
> >> >
> >> > ________________________________
> >> >
> >> > From: flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com>  <mailto:flexcoders%
> > 40yahoogroups.com>
> >>
> >> [mailto:flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com>  <mailto:flexcoders%
> > 40yahoogroups.com>
> >> ] On
> >> > Behalf Of sailorsea21
> >> > Sent: Thursday, October 16, 2008 4:38 PM
> >> > To: flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com>  <mailto:flexcoders%
> > 40yahoogroups.com>
> >> > Subject: [flexcoders] Re: sailorsea21 - RemoveChild question.
> >> >
> >> >
> >> >
> >> > Hi Tracy, thank you for your quick response.
> >> > I'm a little stuck on this one... I can't get it to work...
> >> >
> >> > I'm now able to load a module and unload it. But if I load
> > several
> >> > modules, I'm only able to unload the latest one.
> >> >
> >> > When I try unloading the other loaded modules I receive the
> > follow
> >> > error:
> >> >
> >> > ArgumentError: Error #2025: The supplied DisplayObject must be 
a
> >> > child of the caller.
> >> > at flash.display::DisplayObjectContainer/removeChild()
> >> > at
> >> >
> >>
> > 
mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::$remo
<http://www.adobe.com/2006/flex/mx/internal::$remo> 
> >> <http://www.adobe.com/2006/flex/mx/internal::$remo
<http://www.adobe.com/2006/flex/mx/internal::$remo> >
> >> > <http://www.adobe.com/2006/flex/mx/internal::$remo
<http://www.adobe.com/2006/flex/mx/internal::$remo> 
> >> <http://www.adobe.com/2006/flex/mx/internal::$remo
<http://www.adobe.com/2006/flex/mx/internal::$remo> > >
> >> > veChild()[E:\dev\3.1.0
> >> > \frameworks\projects\framework\src\mx\core\UIComponent.as:5074]
> >> > at mx.core::Container/removeChild()[E:\dev\3.1.0
> >> > \frameworks\projects\framework\src\mx\core\Container.as:2267]
> >> > at content_module_template_blank/click()
> >> > [C:\Inetpub\wwwroot\LWY\UI\UI Score\UI Score 004
> >> > \src\content_module_template_blank.mxml:29]
> >> >
> >> > This is my code:
> >> >
> >> > import mx.states.RemoveChild;
> >> > import mx.modules.ModuleLoader;
> >> > import mx.controls.Button;
> >> >
> >> > private var moduleloader:ModuleLoader;
> >> > private var button:Button;
> >> >
> >> > public function loadmodule():void {
> >> > moduleloader = new ModuleLoader();
> >> > tiletest.addChild(moduleloader);
> >> > moduleloader.url = "test.swf";
> >> > button = new Button();
> >> > button.label = "unload";
> >> > button.addEventListener(MouseEvent.CLICK, click);
> >> > tiletest.addChild(button);
> >> > }
> >> >
> >> > private function click(evt:MouseEvent):void {
> >> > tiletest.removeChild(moduleloader);
> >> > tiletest.removeChild(button);
> >> > }
> >> >
> >> > <mx:Tile width="100%" height="100%" id="tiletest"/>
> >> > <mx:LinkButton label="Load" click="loadmodule()"
> > buttonMode="true"/>
> >> >
> >> > Thank you very much.
> >> >
> >> > -David.
> >> >
> >>
> >
> >
> >
> > ------------------------------------
> >
> > --
> > Flexcoders Mailing List
> > FAQ: 
http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
<http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt> 
> > Alternative FAQ location: 
> > https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-
<https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-> 
446f-b4cf-1e62079f6847
> > Search Archives: 
> > http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo
<http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo> ! 
Groups 
> > Links
> >
> >
> >
> >
>

 

Reply via email to