incubator-flex-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Maurice Amsellem (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (FLEX-32642) CartesianDataCanvas added childs do not persist in the _childMap dictionary
Date Wed, 17 Oct 2012 17:20:04 GMT

    [ 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

Mime
View raw message