you could use something like an itemRenderer as the tab and its data property to compare against the selected item of your data grid.
Here is a simple example:
---------------- snip ----------------
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var people : ArrayCollection = initPeople();
private function initPeople() : ArrayCollection
{
var result : ArrayCollection = new ArrayCollection();
result.addItem("John Miller");
result.addItem("Steve Jones");
result.addItem("Ramirez Maria Santa Cruz");
return result;
}
private function showInTab( event : Event ) : void
{
var selectedItem : String = event.target.selectedItem as String;
var tab : MyTab = findTab( selectedItem );
if( tab == null )
{
tab = createTab( selectedItem );
tn.addChild( tab );
}
tn.selectedChild = tab;
}
private function findTab( item : * ) : MyTab
{
var numChildren : int = tn.numChildren;
for( var i : int = 0; i < numChildren; i++ )
{
var tab : MyTab = tn.getChildAt( i ) as MyTab;
if( tab.data == item )
{
return tab;
}
}
return null;
}
private function createTab( item : * ) : MyTab
{
var result : MyTab = new MyTab();
result.data = ""> return result;
}
]]>
</mx:Script>
<mx:ComboBox dataProvider="{ people }" change="showInTab( event )"/>
<mx:TabNavigator id="tn" width="500"/>
</mx:Application>
---------------- snip ----------------
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%" height="100%"
label="{ renderLabel( data )}"
>
<mx:Script>
<![CDATA[
private function renderText( data : Object ) : String
{
return data as String;
}
private function renderLabel( data : Object ) : String
{
return data as String;
}
]]>
</mx:Script>
<mx:Label text="{ renderText( data )}" />
</mx:VBox>
---------------- snip ----------------
Cheers,
Ralf.
On 7/21/06, Nick Collins <[EMAIL PROTECTED]> wrote:
I tried something very similar to that, but got the following error, as I did this time:
1118: Implicit coercion of a value with static type flash.display:DisplayObject to a possibly unrelated type mx.core:Container.
On 7/20/06, fwscott < [EMAIL PROTECTED]> wrote:Hey Nick,
You could assign a name to your tab and then use
this.windowTabs.getChildByName(newtab.name);
Something like
private function createTab(createTabName:String):void
{var newid:String = 'userTab' +
this.masterList.selectedItem.ContribNum;
var selectTab:Container = this.windowTabs.getChildByName(newid);
if(!selectTab) {
var newVbox:VBox = new VBox();
var newHbox:HBox = new HBox();
var newTab:Canvas = new Canvas();
var newSpacer:Spacer = new Spacer();
var tabCloseBtn:Button = new Button();
// create button to close tab
tabCloseBtn.label = "Close Tab";
tabCloseBtn.addEventListener
(MouseEvent.CLICK,myClickListener);
// create spacer to position close button
newSpacer.percentWidth = 100;
// create box layout controls
newHbox.percentWidth = 100;
newHbox.addChild(newSpacer);
newHbox.addChild(tabCloseBtn);
newVbox.addChild(newHbox);
newVbox.addChild
(getTithesComponent(this.masterList.selectedItem.ContribNum));
// create tab
newTab.label = createTabName;newTab.id = newid;
newTab.name = newid;
newTab.addChild(newVbox);
this.windowTabs.addChild(newTab);
this.windowTabs.selectedChild = newTab;
}
--- In flexcoders@yahoogroups.com , "Nick Collins" <[EMAIL PROTECTED]> wrote:
>
> I've got a datagrid with a list of people, that when you double click on
> one, it creates a new tab with that person's data into a
TabNavigator. I'm
> trying to get it so it will only open one instance of a tab for each
person,
> and if you try to open a person again, it will simply select their
tab that
> already exists. Sounds pretty straightforward, right?
>
> Here's what I've got, when you click the button for their data or double
> click their name, an event is launched which then calls this function,
> createTab:
>
> private function createTab(createTabName:String):void
> {
> var newVbox:VBox = new VBox();
> var newHbox:HBox = new HBox();
> var newTab:Canvas = new Canvas();
> var newSpacer:Spacer = new Spacer();
> var tabCloseBtn:Button = new Button();
>
> // create button to close tab
> tabCloseBtn.label = "Close Tab";
> tabCloseBtn.addEventListener (MouseEvent.CLICK,
> myClickListener);
>
> // create spacer to position close button
> newSpacer.percentWidth = 100;
>
> // create box layout controls
> newHbox.percentWidth = 100;
> newHbox.addChild(newSpacer);
> newHbox.addChild(tabCloseBtn);
> newVbox.addChild(newHbox);
> newVbox.addChild (getTithesComponent(
> this.masterList.selectedItem.ContribNum));
>
> // create tab
> newTab.label = createTabName;
> newTab.id = 'userTab' +
> this.masterList.selectedItem.ContribNum ;
> newTab.addChild(newVbox);
>
> var selectTab:ObjectName = newTab.id;
>
> if (!selectTab) {
> this.windowTabs.selectedChild = selectTab;
> } else {
> this.windowTabs.addChild(newTab);
> this.windowTabs.selectedChild = newTab;
> }
>
> }
>
> Now from the docs I've found, it seems like doing an if statement
with the
> condition of ! objectID should be checking if that id exists, right? for
> some reason it always returns false, even when a new canvas in the
> TabNavigator stack with that id value already exists.
>
> Any ideas how I can accurately detect if the object exists?
>
--
Ralf Bokelberg <[EMAIL PROTECTED]>
Flex & Flash Consultant based in Cologne/Germany __._,_.___
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
SPONSORED LINKS
Web site design development | Computer software development | Software design and development |
Macromedia flex | Software development best practice |
YAHOO! GROUPS LINKS
- Visit your group "flexcoders" on the web.
- To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
- Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.