You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flex.apache.org by "Nick Kwiatkowski (JIRA)" <ji...@apache.org> on 2014/05/21 04:41:39 UTC

[jira] [Closed] (FLEX-34283) XML item's parent null in item renderer when added to XMLListCollection

     [ https://issues.apache.org/jira/browse/FLEX-34283?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Nick Kwiatkowski closed FLEX-34283.
-----------------------------------

       Resolution: Fixed
    Fix Version/s: Apache Flex 4.13.0

Issue has been fixed with commit 89853fa.  

One slight regression that does exist from < 4.11.0 however.  We no longer automatically re-parent items that are added to the collection.  This is consistent with with XML models.  Also, the pointer (memory location) to [source] will change whenever an item is added to the list.  This should't be an expensive operation (it's an o*n operation), but if you are watching the source property, you may not see the changes to the data.  This is to get around a bug in the flash player.

The sample code that was attached attempts to add an item to the collection that does not have a parent.  The .copy() function that was used does not copy the parent property, for some odd reason.  So, the result will not be the same as previous sdk versions, but it is working as it should be now.

> XML item's parent null in item renderer when added to XMLListCollection
> -----------------------------------------------------------------------
>
>                 Key: FLEX-34283
>                 URL: https://issues.apache.org/jira/browse/FLEX-34283
>             Project: Apache Flex
>          Issue Type: Bug
>          Components: Spark: List
>    Affects Versions: Apache Flex 4.12.0
>            Reporter: Frédéric Monjo
>            Assignee: Nick Kwiatkowski
>            Priority: Critical
>              Labels: collections, xml
>             Fix For: Apache Flex 4.13.0
>
>         Attachments: Tests.mxml
>
>
> Since 4.12, there seems to be a regression bug in XMLListCollection. The scenario is:
> # The user selects an item in a list and clicks a button to create a copy of this item below the selected one
> # Clone the item through {{item.copy()}}, make some modifications to this item
> # Add the item to the XMLListCollection using {{addItemAt}}, then call {{refresh()}} on the collection
> # Inside some item renderers (not obviously the cloned one), XML item's parent is null, and never get updated, which could cause runtime errors.
> Up to version 4.11, there has never been such problems. After a short investigation, this problem may be caused by a change in {{XMLListAdapter}} from [this commit|https://github.com/apache/flex-sdk/commit/59dd2be7f6a9b0fda745249cf979adeac7f406b7]. 
> Please find attached a sample program to reproduce the bug. Run the program, select an item and click on the "Duplicate after" button. 
> When run in 4.11, you should see the following console trace :
> {code}
> <foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="2"/></root>
> <foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="2"/></root>
> <foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="2"/></root>
> <foo id="2"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="2"/></root>
> --------------------------------------------------
> <foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="2"/></root>
> <foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="2"/></root>
> <foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="2"/></root>
> <foo id="2"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="2"/></root>
> {code}
> Whereas when run in 4.12, you would get :
> {code}
> <foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="2"/></root>
> <foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="2"/></root>
> <foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="2"/></root>
> <foo id="2"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="2"/></root>
> --------------------------------------------------
> <foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="2"/></root>
> <foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="2"/></root>
> <foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="2"/></root>
> <foo id="2"/> --- is child of ---> null
> {code}
> Where you can see that the last item has lost his parent (note that it is not the cloned item). You may try to clone several random items, and results get even more confusing as you clone more items :
> {code}
> <foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="2"/></root>
> <foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="2"/></root>
> <foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="2"/></root>
> <foo id="2"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="2"/></root>
> --------------------------------------------------
> <foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="2"/></root>
> <foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="2"/></root>
> <foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="2"/></root>
> <foo id="2"/> --- is child of ---> null
> --------------------------------------------------
> <foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/></root>
> <foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/></root>
> <foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/></root>
> <foo id="1++"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/></root>
> <foo id="2"/> --- is child of ---> null
> --------------------------------------------------
> <foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/></root>
> <foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/></root>
> <foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/></root>
> <foo id="1++"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/></root>
> <foo id="2"/> --- is child of ---> null
> <foo id="2+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/></root>
> --------------------------------------------------
> <foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/></root>
> <foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/></root>
> <foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/></root>
> <foo id="1++"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/></root>
> <foo id="2"/> --- is child of ---> null
> <foo id="2+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/></root>
> <foo id="2+"/> --- is child of ---> null
> --------------------------------------------------
> <foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo id="2++"/></root>
> <foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo id="2++"/></root>
> <foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo id="2++"/></root>
> <foo id="1++"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo id="2++"/></root>
> <foo id="2"/> --- is child of ---> null
> <foo id="2+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo id="2++"/></root>
> <foo id="2+"/> --- is child of ---> null
> <foo id="2++"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo id="2++"/></root>
> --------------------------------------------------
> <foo id="0"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo id="2+"/><foo id="2++"/></root>
> <foo id="1"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo id="2+"/><foo id="2++"/></root>
> <foo id="1+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo id="2+"/><foo id="2++"/></root>
> <foo id="1++"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo id="2+"/><foo id="2++"/></root>
> <foo id="2"/> --- is child of ---> null
> <foo id="2+"/> --- is child of ---> <root><foo id="0"/><foo id="1"/><foo id="1+"/><foo id="1++"/><foo id="2"/><foo id="2+"/><foo id="2+"/><foo id="2+"/><foo id="2++"/></root>
> <foo id="2+"/> --- is child of ---> null
> <foo id="2+"/> --- is child of ---> null
> <foo id="2++"/> --- is child of ---> null
> {code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)