----- Original Message ----- 
From: "sailorsea21" <[EMAIL PROTECTED]>
To: <flexcoders@yahoogroups.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, "Tracy Spratt" <[EMAIL PROTECTED]> 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:[EMAIL PROTECTED] On
>> Behalf Of sailorsea21
>> Sent: Friday, October 17, 2008 11:45 AM
>> To: flexcoders@yahoogroups.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>
>> , "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@yahoogroups.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>
>> > 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> >
>> > 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
> Alternative FAQ location: 
> https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-446f-b4cf-1e62079f6847
> Search Archives: 
> http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups 
> Links
>
>
>
> 

Reply via email to