Uploaded image for project: 'Apache Flex'
  1. Apache Flex
  2. FLEX-24181

Using SkinnableContainer in an ItemRenderer isn't ready when set data is called

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Won't Fix
    • Adobe Flex SDK Previous
    • None
    • None
    • Affected OS(s): All OS Platforms
      Affected OS(s): All OS Platforms
      Language Found: English

    Description

      Steps to reproduce:
      1. Compile and run:

      <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
      xmlns:s="library://ns.adobe.com/flex/spark">

      <s:List dragEnabled="true">
      <s:dataProvider>
      <s:ArrayCollection>
      <fx:String>one</fx:String>
      <fx:String>two</fx:String>
      </s:ArrayCollection>
      </s:dataProvider>
      <s:itemRenderer>
      <fx:Component>
      <s:ItemRenderer>
      <fx:Script>
      <![CDATA[
      override public function set data(value:Object):void

      { super.data = value; if (data == null) return; title.text = data as String; }

      ]]
      >
      </fx:Script>
      <s:SkinnableContainer>
      <s:Label id="title" />
      </s:SkinnableContainer>
      </s:ItemRenderer>
      </fx:Component>
      </s:itemRenderer>
      </s:List>
      </s:Application>

      2. Try dragging an item in the List

      Actual Results:

      RTE:

      TypeError: Error #1009: Cannot access a property or method of a null object reference.
      at ReproInnerClass0/set data()[/Users/stshongr/Documents/workspace/Repro/src/Repro.mxml:21]
      at spark.components::SkinnableDataContainer/updateRenderer()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\components\SkinnableDataContainer.as:592]
      at spark.components.supportClasses::ListBase/updateRenderer()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\components\supportClasses\ListBase.as:961]
      at spark.components.supportClasses::ListItemDragProxy/cloneItemRenderer()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\components\supportClasses\ListItemDragProxy.as:228]
      at spark.components.supportClasses::ListItemDragProxy/createChildren()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\components\supportClasses\ListItemDragProxy.as:142]
      at mx.core::UIComponent/initialize()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\UIComponent.as:7250]
      at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::childAdded()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\UIComponent.as:7142]
      at mx.core::UIComponent/addChild()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\UIComponent.as:6825]
      at mx.managers::DragManagerImpl/doDrag()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\DragManagerImpl.as:289]
      at mx.managers::DragManager$/doDrag()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\DragManager.as:303]
      at spark.components::List/dragStartHandler()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\components\List.as:1347]
      at flash.events::EventDispatcher/dispatchEventFunction()
      at flash.events::EventDispatcher/dispatchEvent()
      at mx.core::UIComponent/dispatchEvent()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\UIComponent.as:12266]
      at spark.components::List/mouseMoveHandler()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\components\List.as:1605]

      Expected Results:

      No RTE, should work the same way it does when the SkinnableContainer is replaced with a Group

      Workaround (if any):

      <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
      xmlns:s="library://ns.adobe.com/flex/spark">

      <s:List dragEnabled="true">
      <s:dataProvider>
      <s:ArrayCollection>
      <fx:String>one</fx:String>
      <fx:String>two</fx:String>
      </s:ArrayCollection>
      </s:dataProvider>
      <s:itemRenderer>
      <fx:Component>
      <s:ItemRenderer creationComplete="setData()">
      <fx:Script>
      <![CDATA[
      override public function set data(value:Object):void

      { super.data = value; if (data == null) return; if (title != null) setData(); }

      private function setData():void

      { title.text = data as String; }

      ]]
      >
      </fx:Script>
      <s:SkinnableContainer>
      <s:Label id="title" />
      </s:SkinnableContainer>
      </s:ItemRenderer>
      </fx:Component>
      </s:itemRenderer>
      </s:List>
      </s:Application>

      Attachments

        Activity

          People

            adobejira Adobe JIRA
            adobejira Adobe JIRA
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: