2016-01-20 6 views
0

Я хочу создать собственный список искры, который на основе значения (называемого типа) в строке поставщика данных установит для этой строки средство визуализации условных позиций.Flex Mobile Spark List * условный * ItemRenderer

<s:List> 
    <s:dataProvider> 
     <s:ArrayCollection> 
      <s:source> 
       <fx:Object type="type1" label="type 1 item" /> 
       <fx:Object type="type2" label="type 2 item" /> 
       <fx:Object type="type3" label="type 3 item" /> 
       <fx:Object type="type2" label="type 2 item" /> 
       <fx:Object type="type4" label="type 4 item" /> 
      </s:source> 
     </s:ArrayCollection> 
    </s:dataProvider> 
</s:List> 

Таким образом, по существу средство визуализации элементов для каждого типа строк будет отличаться.

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

Я нашел этот код для списка ого:

public class MultipleRenderersList extends List 
{  
    override public function createItemRenderer(data:Object):IListItemRenderer 
    { 
     if (data.type == 'type1') 
    { 
     return new Type1Component; 
    } 
    else if (data.label == 'type2') 
    { 
     return new Type2Component; 
    } 
    return null; 
} 

Но список искры не разоблачить «createItemRenderer» или даже что-нибудь подобное. Это, однако, имеет

override public function set itemRenderer(value:IFactory):void 

Но у меня нет никакого способа доступа к DataProvider сделать условную часть проблемы.

Может ли кто-нибудь помочь?

+0

Просто позвольте свой itemrenderer обрабатывать это сам. – BotMaster

+0

@BotMaster, я не понимаю этого комментария, чего я пытаюсь достичь, когда DataProvider представляет элемент строки из _type1_, я хочу, чтобы инструмент визуализации элемента type1 (разные макеты, цвета и т. Д.), ** просто для этой строки * * То же самое для _type2_ и т. д. Я не могу использовать переключение состояний в пользовательском рендерере, потому что это действительно ненадежно. Если я не пропущу что-то очевидное, если да, пожалуйста, объясните далее :) Спасибо –

+0

, если ваш пользовательский itemrenderer переопределяет данные, тогда вы можете заставить его принять решение об этих данных и как сделать сам. – BotMaster

ответ

1

Итак, нашли его, я думаю:/

http://sourceforge.net/adobe/flexsdk/wiki/Spark%20List/

сниппет

private function introspectRole(item:Object):IFactory { 
    if (item.role == "employee") { 
     return new ClassFactory(EmployeeRenderer); 
    } else if (item.role == "manager") { 
     return new ClassFactory(ManagerRenderer); 
    } else { 
     return new ClassFactory(DefaultItemRenderer); 
    } 
} 

и установить itemRendererFunction к этому, казалось бы, простой, но он работает, так что да.

Thanks