I have a Repeater of CheckBoxes, which may or may not have a sublayer of CheckBoxes. It should look something like: [] archive 1 [] archive 2 [] dataSource 1 [] dataSource 2 [] dataSource 3 [] archive 3
By default all CheckBoxes are unselected, and any sublayer CheckBoxes are not enabled. If you select a CheckBox(archive 2) that has sublayer CheckBoxes (dataSource 1- 3), they are enabled. If you unselect a CheckBox that has sublayer CheckBoxes, they are disabled and unselected. I'm using the Cairngorm framework, so the call results from the database are returned to my model. This model is used as the dataProvider for the Repeater. The issue is that I can not update my model and have the sublayer Repeater update properly. For example, if there are three sublayer CheckBoxes (like above), selecting the parent CheckBox (archive 2) will enable only the first 2 sublayer CheckBoxes (dataSource 1 & 2). Then deselecting the parent CheckBox will disable the first 2 sublayer CheckBoxes, but enable the third (dataSource 3). From this point on the enabled property for dataSource 1&2 will be in a opposite state from dataSource 3. Below are code snippets: ------------------------------------------------------------ Library.mxml: <mx:Repeater id="archiveRepeater" dataProvider="{__model.archiveElements}"> <mx:CheckBox id="archive" label="{archiveRepeater.currentItem.archiveName}" click="__model.archiveChanged(event)"/> <mx:Repeater id="dataSourceRepeater" dataProvider= "{archiveRepeater.currentItem.archiveDataRepositories}"> <mx:CheckBox id="dataSource" label="{dataSourceRepeater.currentItem.repositoryName}" enabled="{dataSourceRepeater.currentItem.enabled}" selected="{dataSourceRepeater.currentItem.selected}" click="__model.dataSourceChanged(event)"> </mx:CheckBox> </mx:Repeater> </mx:Repeater> ------------------------------------------------------------ ------------------------------------------------------------ LibraryModel.as: public function archiveChanged( event:MouseEvent ):void { var selectionChoice:Boolean = event.target.selected; var selectionName:String = event.target.label; var al:ArchiveLocation = ArchiveLocation(event.target.getRepeaterItem()); al.selected = selectionChoice; // Go through any data repositories // and toggle their enabled property if (al.archiveDataRepositories != null) { var adr:Array = al.archiveDataRepositories; if (selectionChoice == false) { // Deselect and disable all CheckBoxes for (var i:uint = 0; i < adr.length; i++) { // Update the model adr[i].selected = false; adr[i].enabled = false; } else { // Enable all CheckBoxes for (i = 0; i < adr.length; i++) { adr[i].enabled = true; } } } } } ------------------------------------------------------------ As you can tell, there are ValueObjects that store the enabled and selected attributes for the dataSource CheckBoxes. What's even weirder, is that the ValueObjects that make up the dataProvider for the Repeater are updated correctly (their selected and enabled properties), but the last CheckBox of any sublayer remains in a state that is opposite of the other grouped sublayer CheckBoxes. I've gotten around this by directly updating the display by using: event.target.document.dataSource[i][j].enabled = false; But I don't want to rely on this as it will cause issues later on. I feel that I should be able to update the dataProvider for the various Repeaters and this should update the display properly. Any suggestions would be greatly appreciated. ~Geoff~