[ https://issues.apache.org/jira/browse/FLEX-32642?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13478053#comment-13478053 ]
Maurice Amsellem commented on FLEX-32642: ----------------------------------------- I think the error occurs when you update an existing data child position using updateDataChild with any coordinate set to NaN. IMO, the error is in positionChildren() function which is called in updateDisplayList(); When a dataChild has an undetermined coordinate (NaN), it is REMOVED from the childMap and from the display list. However, if the dataChild is set valid coordinates afterwards, it is not added back to the map, so the RTE. CartesianDataCanvas.as private function positionChildren():void { for (var p:* in _childMap) { .... if (isNaN(left) || isNaN(right) || isNaN(top) || isNaN(bottom)) { removeChild(p); continue; } ... } } > CartesianDataCanvas added childs do not persist in the _childMap dictionary > --------------------------------------------------------------------------- > > Key: FLEX-32642 > URL: https://issues.apache.org/jira/browse/FLEX-32642 > Project: Apache Flex > Issue Type: Bug > Components: Charts > Affects Versions: Adobe Flex SDK Previous > Environment: Affected OS(s): Windows > Language Found: English > Reporter: Adobe JIRA > > Steps to reproduce: > 1. Add a chart item using CartesianDataCanvas.addDataChild(...) method in a > initialize event handler. > 2. update the chart item using CartesianDataCanvas.updateDataChild(...) > method in a creationComplete event handler. > > Actual Results: > updateDataChild throws null reference exception. > > Expected Results: > updateDataChild should not throw null reference exception. > > Workaround (if any): > update the chart item using CartesianDataCanvas.updateDataChild(...) right > after addDataChild(...) method. > It also seems that if the addDataChild is supplied with some combination of > the coordinate points, it seems ok, but not with defaults which are nulls. > By looking at the code, the _childMap being instantiated with weak reference > dictionary may cause this issue in the constructor? > _childMap = new Dictionary(true); > But then, looking into the code of the class reveals that the dictionary > management seems to be quite convoluted... > As an example, the code segment below seems to be somewhat confusing? > public function addDataChild(child:DisplayObject,left:* = undefined, > top:* = undefined, right:* = undefined, > bottom:* = undefined , hCenter:* = > undefined, vCenter:* = undefined):void > { > var dc:CartesianDataChild = new > CartesianDataChild(child,left,top,right,bottom); > dc.addEventListener("change",dataChildChangeHandler,false,0,true); > addChild(child); > updateDataChild(child,left,top,right,bottom,hCenter,vCenter); > invalidateOpCodes(); > } > > override public function addChild(child:DisplayObject):DisplayObject > { > var dc:CartesianDataChild = new CartesianDataChild(child); > _childMap[child] = dc; > _dataChildren.push(dc); > dc.addEventListener("change",dataChildChangeHandler,false,0,true); > invalidateOpCodes(); > return super.addChild(child); > } > addDataChild calls addChild, and dc is created in each methods with the same > event handler installed to each instance? > Seems to me that making the dictionary with no weak reference and monitoring > the dictionary content carefully will reveal some issues. > Ensuring only one CartesianDataChild is instantiated and managed in the > dictionary for each added chart item will be good. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira