Probably best to not use repeater. In the AS version, I would guess there are relatively few ways to "switch to a different screen". If you put a breakpoint on code that does that, does it get hit and will the stack info show you how it got there?
You might want to build out a simpler re-construction of this problem in a new Flex project so less of your other code can be run accidentally. The TabBar children should just be Tabs that dispatch events. The logic that responds to the change event should be the main concern. -Alex From: Tom McNeer <tmcn...@gmail.com<mailto:tmcn...@gmail.com>> Reply-To: "flexcoders@yahoogroups.com<mailto:flexcoders@yahoogroups.com>" <flexcoders@yahoogroups.com<mailto:flexcoders@yahoogroups.com>> Date: Tuesday, October 22, 2013 6:41 AM To: "flexcoders@yahoogroups.com<mailto:flexcoders@yahoogroups.com>" <flexcoders@yahoogroups.com<mailto:flexcoders@yahoogroups.com>> Subject: [flexcoders] Nested TabNabvigator/Repeater error Hi, I am trying to create nested TabNavigators which are built dynamically from server data. The top TabNavigator is static. Its children are created by a Repeater. Within each Repeater's child (VBox), another TabNavigator is created, and a second Repeater creates the children of the TabNavigator. This is a revision of a old application, so it's using a 3.6 SDK. The top level tabs represent types of Documents. The second level of tabs represent subtypes. And each time this area is accessed, there will be different trees of types/subtype/documents. The process throws an error intermittently as the elements are created: RangeError: Error #2006: The supplied index is out of bounds. at flash.display::DisplayObjectContainer/getChildAt() at mx.core::Container/getChildAt()[C:\autobuild\3.x\frameworks\projects\framework\src\mx\core\Container.as:2377] at mx.controls::ToggleButtonBar/hiliteSelectedNavItem()[C:\autobuild\3.x\frameworks\projects\framework\src\mx\controls\ToggleButtonBar.as:441] at mx.controls::ToggleButtonBar/updateDisplayList()[C:\autobuild\3.x\frameworks\projects\framework\src\mx\controls\ToggleButtonBar.as:364] at mx.core::UIComponent/validateDisplayList()[C:\autobuild\3.x\frameworks\projects\framework\src\mx\core\UIComponent.as:6510] at mx.core::Container/validateDisplayList()[C:\autobuild\3.x\frameworks\projects\framework\src\mx\core\Container.as:2720] at mx.managers::LayoutManager/validateDisplayList()[C:\autobuild\3.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:622] at mx.managers::LayoutManager/doPhasedInstantiation()[C:\autobuild\3.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:677] at Function/http://adobe.com/AS3/2006/builtin::apply() at mx.core::UIComponent/callLaterDispatcher2()[C:\autobuild\3.x\frameworks\projects\framework\src\mx\core\UIComponent.as:8892] at mx.core::UIComponent/callLaterDispatcher()[C:\autobuild\3.x\frameworks\projects\framework\src\mx\core\UIComponent.as:8832] Since the error reference is to getChildAt(), and before that, to hiliteSelectedNavItem, I assume that the error is coming as the framework tries to select a tab that does not exist. But I have no clue what to do about it. Here is the opening MXML: <mx:TabNavigator id="docTabs" width="100%" height="100%" x="5" y="5" backgroundAlpha="0.0" borderThickness="1" paddingTop="0" creationPolicy="all"> <mx:Repeater id="docTypes" dataProvider="{acCaseDocuments}" recycleChildren="false"> <mx:VBox id="docType" horizontalAlign="center" label="{docTypes.currentItem.friendlyName}" height="95%" width="95%" styleName="contentWhite"> <mx:TabNavigator id="docSubtabs" width="100%" height="100%" x="5" y="5" backgroundAlpha="0.0" borderThickness="1" paddingTop="0" creationPolicy="all"> <mx:Repeater id="docSubtypes" dataProvider="{docTypes.currentItem.subtypes}" recycleChildren="false"> <mx:VBox id="docSubtype" horizontalAlign="center" label="{docSubtypes.currentItem.friendlyName}" height="95%" width="95%" styleName="contentWhite"> I have also tried creating the elements in ActionScript, to bypass the Repeater action. This results in no errors. Both levels of tabs appear to be created properly (by "appear," I mean "visually.") However, when a tab on the second level (the subtypes) is clicked, rather than the selected chlid appearing, the user is switched to an entirely different screen - completely away from the Documents area. I don't know why the click is taking me away from the screen, but as I walk through the debugging, it appears that while the TabNavigator children are created correctly, the children of its associated TabBar are not. Here's the ActionScript, which is fired by a CollectionChangeEvent listener on the ArrayCollection which contains the Document data: private function buildUI(e:CollectionEvent):void{ clearTabs(); for(var i:int=0;i<acCaseDocuments.length;i++){ var arSubtypes:Array = acCaseDocuments[i].subtypes as Array; var vb:VBox = new VBox(); vb.id<http://vb.id>='docType' + i; vb.setStyle('horizontalAlign','center'); vb.label = acCaseDocuments[i].friendlyName as String; vb.percentWidth=95; vb.percentHeight=95; vb.styleName='contentWhite'; var tn:TabNavigator = new TabNavigator(); tn.id<http://tn.id>='docSubtab' + i; tn.percentWidth=100; tn.percentHeight=100; tn.x=5; tn.y=5; tn.setStyle("backgroundAlpha",0); tn.setStyle('borderThickness',1); tn.setStyle('paddingTop',0); for(var j:int=0;j<arSubtypes.length;j++){ var ddg:DocDataGrid = new DocDataGrid(); ddg.id<http://ddg.id>= 'docSubtype' + j; ddg.label=arSubtypes[j].friendlyName as String; ddg.percentWidth=95; ddg.percentHeight=95; ddg.gridData.source=arSubtypes[j].documents as Array; ddg.gridData.refresh(); tn.addChild(ddg);; } vb.addChild(tn); docTabs.addChild(vb); } } The "DocDataGrid" reference is simply a custom component that is a Box containing a DataGrid. Sorry for the lengthy post, but I wanted to make sure that the problem was described thoroughly before I asked anyone for help. Any thoughts on the issue would be greatly appreciated. -- Thanks, Tom Tom McNeer MediumCool http://www.mediumcool.com 1735 Johnson Road NE Atlanta, GA 30306 404.589.0560