2012-03-01 2 views
0

Я список ниже:обновить ItemRenderer каждого элемента в компоненте List Flex

<s:List id="list2" width="100%" height="100%" dataProvider="{ recordingsShown }" 
       itemRenderer="components.VideoItemRenderer2" 
       selectedIndex="0" visible="false"> 

      <s:layout> 

       <s:TileLayout id="tilelayout" 
           useVirtualLayout="true" 
           orientation="columns" 
           columnAlign="justifyUsingWidth" rowAlign="justifyUsingHeight" 
           requestedColumnCount="3" 
           requestedRowCount="2" 
           paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5" 
           verticalGap="10" horizontalGap="10" /> 

      </s:layout> 

</s:List> 

, который отображает в плитках имя, дату и изображения предварительного просмотра для каждого из видео, содержащегося в записи arraycollection. Выдано как датапровайдер. Проблемы при добавлении нового видео, я сохранить предварительный просмотр рис в папке и узел, описывающий его в XML и я поставил новый элемент в ArrayCollection с

recordingsShown.addItemAt(newRecording,0); 

он добавляется на сцене, но изображение предварительного просмотра последнего добавленного видео не отображается! Как я могу перерисовать весь список, чтобы показать его?

Вот мой ItemRenderer:

<?xml version="1.0" encoding="utf-8"?> 
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" 
      width="400" height="300" autoDrawBackground="true"> 

<fx:Metadata> 
    [Event(name="playClicked", type="flash.events.Event")] 
</fx:Metadata> 

<fx:Script> 
    <![CDATA[ 
     import flash.filters.GlowFilter; 

     import mx.controls.Alert; 
     import mx.events.FlexEvent; 
     import mx.formatters.DateFormatter; 




     protected function img_rollOverHandler(evt:MouseEvent):void { 
      Image(evt.currentTarget).filters = [new GlowFilter(0xf7941d)]; 
      Image(evt.currentTarget).alpha = 0.9; 
     } 

     protected function img1_rollOutHandler(evt:MouseEvent):void { 
      Image(evt.currentTarget).filters = []; 
      Image(evt.currentTarget).alpha = 1; 
     } 

     protected function playClickHandler(event:MouseEvent):void 
     { 

      dispatchEvent(new Event("playClicked",true,true)); 

     } 

    ]]> 
</fx:Script> 

<fx:Declarations> 
    <s:DateTimeFormatter id="dateTimeFormatter" 
         dateTimePattern="DD.MM.YYYY HH.NN.SS"/> 
</fx:Declarations> 

    <s:states> 
     <s:State name="normal" /> 
     <s:State name="hovered" /> 
     <s:State name="selected" /> 
    </s:states> 

    <s:Rect width="100%" height="100%" radiusX="5" radiusY="5"> 
     <s:filters> 
      <s:DropShadowFilter alpha="0.32" alpha.hovered="0.5" blurX="5" blurY="5" distance="2" /> 
     </s:filters> 
     <s:fill> 
      <s:LinearGradient rotation="90"> 
       <s:GradientEntry color="0x323232" color.selected="black"/> 
       <s:GradientEntry color="#7f7f7f" color.selected="0x333333"/>     
      </s:LinearGradient> 
     </s:fill> 
     <s:stroke> 
      <s:SolidColorStroke color="#ffffff" color.hovered="#f7941d" color.selected="#ed7f09" caps="none" weight="2" joints="miter" miterLimit="4"/> 
     </s:stroke> 
    </s:Rect> 

    <s:Label left="10" top="10" 
      fontStyle="italic" 
      fontWeight="bold" 
      color="#f7941d" 
      text="{dateTimeFormatter.format(data.date)}"/> 

    <s:Label left="10" top="25" 
      fontSize="16" 
      fontWeight="bold" 
      color="#ffffff" 
      text="{data.name}"/>  
    <s:Image id="previewImg" left="10" right="10" bottom="10" top="55" scaleMode="stretch" smooth="true" 
      source="http://localhost:5080/thumbs/{data.thumb}" /> 
      <!-- source="assets/img.jpg"/> -->    

    <s:Image source="assets/play.png" 
      rollOver="img_rollOverHandler(event);" 
      rollOut="img1_rollOutHandler(event);" 
      x="136" y="102" 
      click="playClickHandler(event)" 
      complete="this.invalidateSize()"/> 
</s:ItemRenderer> 
+0

Убедитесь, что установленная функция данных VideoItemRenderer2 правильно обновляется, это может быть проблемой при рендеринге обработчиков возвращенных элементов, которые не обновляются должным образом. –

+0

Как я могу это проверить? Если вы дали мне какой-либо пример или указание, я был бы благодарен .. – sstauross

+0

Убедитесь, что изображение и все, что еще отображается, задано в 'public function set data (value: Object): void' в VideoItemRenderer2. –

ответ

0

Я обнаружил, что, как представляется, проблема с привязкой данных и Спарк изображения. Попробуйте добавить это к корневому тегу:

dataChange="yourImage.validateNow(); 

Если это не работает, задайте весь путь в dataChange.

+0

Я положил это, но ничего ... что вы имеете в виду «установить весь путь в dataChange»? Извините, но я новичок во всем этом. Спасибо за вашу помощь заранее! – sstauross

+0

Я думал, как я могу разместить gif загрузки вместо изображения, которое не отображается, пока оно не будет готово к показу? любая помощь? Это решит проблему? – sstauross

+0

Вместо того, чтобы поместить путь в выражение привязки в теге previewImage, выполните dataChange = "previewImage.source = http: // localhost: 5080/thumbs/{data.thumb}". Проблема в том, что привязка данных не работает по искровым изображениям по какой-либо причине, поэтому вам необходимо явно сбросить исходный код из-за тега изображения. –