2011-05-04 4 views
0

목표 : List의 itemRenderer (Button)에 스킨을 전달하고 해당 목록의 모든 버튼을 스킨하고 싶습니다.Flex 4 : 목록의 ItemRenderer에 대한 데이터 배열로 스킨 ArrayCollection

이 내가 무엇을 가지고 :

목록 :

<s:List itemRenderer="renderers.ItemRenderer" dataProvider="{collectionWorkspace}" /> 

있는 ArrayCollection :

<s:ArrayCollection id="collectionWorkspace"> 
    <comp:Layout1 /> 
    <comp:Layout2 /> 
    <comp:Layout3 /> 
    <comp:Layout4 /> 
    <comp:Layout5 /> 
</s:ArrayCollection> 

레이아웃은 HostComponent 버튼과 피부 클래스입니다.

의 itemRenderer :

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

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

    <s:Button skinClass="{data}"/> 

</s:ItemRenderer> 

나는 (설명 고정) 오류를 얻을 : 오류 : 피부를 응용 프로그램에 대한 .... Button1을 찾을 수 없습니다.

답변

2

skinClass 속성은 실제 클래스 (단추가 자체 스킨 클래스 인스턴스를 만드는 데 필요한)가 아닌 스킨 클래스의 인스턴스로 전달됩니다.

가능한 경우 가장 좋은 방법은 collectionWorkspace을 인스턴스가 아닌 클래스 객체의 배열로 만드는 것입니다. 당신이 할 수없는 경우

<s:ArrayCollection id="collectionWorkspace"> 
    <fx:Class>yourPkg.Layout1</fx:Class> 
    <fx:Class>yourPkg.Layout2</fx:Class> 
    <fx:Class>yourPkg.Layout3</fx:Class> 
    <fx:Class>yourPkg.Layout4</fx:Class> 
    <fx:Class>yourPkg.Layout5</fx:Class> 
</s:ArrayCollection> 

, 당신은 인스턴스의 클래스를 당기고 skinClass에 전달할 수 있어야합니다.

<s:Button skinClass="{Object(data).constructor}"/> 

편집 :

는 IT가 클래스로 초기화되기 전에 datanull로 시작합니다 때문에 작동하지 않습니다 기본적으로 바인딩. null으로 지정하면 예외가 발생합니다. 이 문제를 해결하려면, 당신은 null과 가치 사이의 시간의 기본을 반환해야합니다

<s:Button skinClass="{data != null ? data as Class : spark.skins.spark.ButtonSkin}"/> 

내가 어떤 버튼 스킨을 사용하여 ArrayCollection와 함께이 일을 시도했다. 그것은 효과가 있었다.

+0

편집 된 버튼 SkinClass 값이 나를 위해 잘 작동했습니다! 브라이언 감사합니다. 나는 다른 사람들도 이것에 가치를 찾을 수 있기를 바랍니다. – Yozef

관련 문제