I was able to get it working  in one case using "itemUpdated." I had to
change the ArrayCollection to public, and then set the handler:

[Bindable]
public var colors:ArrayCollection = new ArrayCollection([
     {color:"Red", display: true},
     {color:"Blue", display: true},
     {color:"Green", display: true}
]);

      private function init():void {
          colors.addEventListener(CollectionEvent.COLLECTION_CHANGE,
onChange);
      }
.
.
.
<mx:DataGridColumn dataField="display" rendererIsEditor="true"
editorDataField="selected">
     <mx:itemRenderer>
         <mx:Component>
             <mx:CheckBox label="{data.color}" selected="true"
click="data.display = selected; outerDocument.colors.itemUpdated(data);"
/>
         </mx:Component>
     </mx:itemRenderer>
</mx:DataGridColumn>


I still cannot get it working in the more complex case where I have a
more complex component item renderer:


     <mx:DataGrid id="colorDG" dataProvider="{colors}" editable="true">
         <mx:columns>
             <mx:DataGridColumn headerText="Color" dataField="display"
rendererIsEditor="true" editorDataField="cbSelected">
                 <mx:itemRenderer>
                     <mx:Component>
                         <mx:HBox horizontalAlign="left" paddingLeft="5">
                             <mx:Script>
                             <![CDATA[
                                 [Bindable]
                                 public var cbSelected:Boolean;
                             ]]>
                             </mx:Script>

                             <mx:CheckBox id="displayCheckBox"
selected="true" change="cbSelected = displayCheckBox.selected;
outerDocument.colors.itemUpdated(data);" />
                             <mx:Label text="{data.color}" />
                         </mx:HBox>
                     </mx:Component>
                 </mx:itemRenderer>
             </mx:DataGridColumn>
         </mx:columns>
     </mx:DataGrid>


When I click the checkbox in the above example, the COLLECTION_CHANGE
event is fired three times: the 1st and 3rd time with the prior (wrong)
value and the middle time with the updated (correct) value. When I use
"data.selected = displayCheckBox.selected" the event is fired anywhere
between once and three times and the wrong values end up being stored in
ArrayCollection.

The version I got working is good enough for the time being, but If
anyone can tell what I'm doing wrong in the later example, I would love
to find out so I can understand the SDK better.

Thanks for your help Alex!
Keith


Reply via email to