вы не опубликовали структуру данных, надеюсь, я правильно понял. Следующая демонстрация создает и заполняет TabNavigator тремя экземплярами NavigatorContent, содержащими серии RadioButton, которые можно выбрать с помощью метода getHGroupById.
Я уверен, что можно реализовать нечто подобное, используя Bindable Data и ItemRenderes, возможно, лучшее решение.
* Николай
Применение:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<mx:TabNavigator id="tabNav" height="300" width="300" creationComplete="__init();" creationPolicy="all">
</mx:TabNavigator>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import spark.components.NavigatorContent;
import spark.components.VGroup;
/**
* The Data Structure, as I understood it
* perhaps you have to adapt the code if
* this does not match your desired structure
* or hierarchy
* */
private var arrColl_items:ArrayCollection = new ArrayCollection(
[
new ArrayCollection(
// 1st NavigatorContent
[
{id:"0",label:"HGroup_1.1"},
{id:"1",label:"HGroup_1.2"}
]
),
new ArrayCollection(
// 2nd NavigatorContent
[
{id:"2",label:"HGroup_2.1"},
{id:"3",label:"HGroup_2.2"},
{id:"4",label:"HGroup_2.3"}
]
),
new ArrayCollection(
// 3rd NavigatorContent
[
{id:"5",label:"HGroup_3.2"},
{id:"6",label:"HGroup_3.3"},
{id:"7",label:"HGroup_3.4"},
{id:"8",label:"HGroup_3.5"},
{id:"9",label:"HGroup_3.5"}
]
)
]
);
/**
* Invoked on creationComplete
* */
private function __init():void
{
// lets add some navigatorContent
for(var i:int=0;i<arrColl_items.length;i++){
// create the navigatorContent
var navContent:NavigatorContent = new NavigatorContent();
navContent.label = "navContent_"+i;
// add a VGroup
var vgrp:VGroup = new VGroup();
vgrp.id = "vGroup";
// and now we add custom HGroup Components called MyHGroup
for (var j:int=0;j<arrColl_items[i].length;j++)
{
var hgrp:MyHGroup = new MyHGroup();
hgrp.id = arrColl_items[i][j].id;
hgrp.label.text = arrColl_items[i][j].label;
vgrp.addElement(hgrp);
}
navContent.addElement(vgrp);
tabNav.addElementAt(navContent,i);
}
// Accessing the radioButtons is now possible
// using the getHGroupById Method
getHGroupById("0").rb1.selected = true;
getHGroupById("1").rb2.selected = true;
getHGroupById("3").rb3.selected = true;
getHGroupById("7").rb1.selected = true;
// I added a RadioGroup within MyHGroup, lets read the selectedValue
trace(getHGroupById("0").rbGroup.selectedValue);
}
/**
* getHGroupById
* Method that runs through the Data Structure
* and returns a MyHGroup Class with the given id
* @param $id:String The id of the MyHGroup Class you want to fetch
* @return MyHGroup or null if non existent
*
* */
public function getHGroupById($id:String):MyHGroup{
// running through the NavigatorContent Instances
for(var i:uint=0; i<tabNav.numElements; i++){
var navContent:NavigatorContent = NavigatorContent(tabNav.getElementAt(i));
// running through the HGroups within a VGroup
for(var j:uint=0; j<VGroup(navContent.getElementAt(0)).numElements; j++){
var hgrp:MyHGroup = VGroup(navContent.getElementAt(0)).getElementAt(j) as MyHGroup;
if(hgrp.id==$id)return hgrp;
}
}
return null;
}
]]>
</fx:Script>
</s:Application>
Наконец, компонент MyHGroup, используемый в этом примере. Создайте новый файл MXML с именем MyHGroup.mxml и вставьте следующий код.
<?xml version="1.0" encoding="utf-8"?>
<!-- Create a new MXML File name MyHGroup and add this code -->
<s:HGroup xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="200" height="20" paddingLeft="10" >
<fx:Declarations>
<!-- The RadioGroup the Buttons will be linked with -->
<s:RadioButtonGroup id="rbGroup"/>
</fx:Declarations>
<!-- Some fancy label -->
<s:Label id="label" height="20" verticalAlign="middle"/>
<!-- Your Radio Buttons -->
<s:RadioButton id="rb1" group="{rbGroup}"/>
<s:RadioButton id="rb2" group="{rbGroup}"/>
<s:RadioButton id="rb3" group="{rbGroup}"/>
</s:HGroup>