2012-02-15 3 views
1

私のアプリケーションでは、別の場所にドロップダウンリストを使用します。これらのデータプロバイダのために 、常にArrayCollectionのですが、異なる配列コレクションフィールドでドロップダウンリストをスキップする方法

ケース1

var collection:ArrayCollection = new ArrayCollection(["foo", "foo2", "foo3"]); 

そして、いくつかの回のArrayCollectionのような一つのフィールドといくつかは、他の方法で移入され、いくつかのフィールドがあります。

ケース2

var collection:ArrayCollection = new ArrayCollection (
       [{DESC:"foo", ID:"0"}, 
       {DESC:"foo1", ID:"1"}, 
       {DESC:"foo2",ID:"2"}, 
       {DESC:"foo3", ID:"3"} 
       ] 
       ); 

この場合、labelFieldはDescです。

だから、私はカスタムDDLに好きで、私はラベル部分についてitemrenderで皮膚を作成します。

<?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" 
       autoDrawBackground="true"> 


    <s:states> 
     <s:State name="normal"/> 
     <s:State name="hovered"/> 
     <s:State name="selected"/> 
    </s:states> 
    <s:Label text="{data}" backgroundColor.selected="#1B5790" color.selected="white" 
      backgroundColor.hovered="#E1DFD2" color.hovered="white" fontWeight.hovered="bold" 
      width="100%" height="25" paddingLeft="5" paddingTop="5" styleName="myLabelBlack" toolTip="{data}"/> 

</s:ItemRenderer> 

この方法は、ケース2と実施例1(arListBank)でうまく動作しますが、表示[Objectオブジェクト]。

私の目標は、どちらの場合も同じitemrendererを使用することです。

お手伝いできますか?

おかげ

+0

ここでは多くの良い情報を提供していますが、あなたは、あなたのデータオブジェクトがどのように構造化されているか説明しませんでした。その情報がなければ、itemRendererの作成を手助けすることは不可能です。 dataProviderをどのように設定するかは関係ありません。実際に表示しようとしているデータは重要です。参照のポイントとして、おそらく同じitemRendererを使用して2つの異なるデータセットを表示しようとはしません。 – JeffryHouser

+0

+1私はあなたの投稿を無限にもっと答えると信じて編集します。 – JeffryHouser

答えて

0

あなたはコメントをお読みくださいHERE
をレンダラ「ビュー」をアップに変更することはかなり良い方法があります。

0

私はこの時点で、あなたのデータ構造を変更し、そこから行くことは不可能であるという仮定を作るつもりです。 itemRendererに渡されるデータ要素は、dataProvider内の単一の項目を表すことに注意してください。第2のケースで

foo 

、それはこのように、オブジェクトになります:

{DESC:"foo", ID:"0"} 

だから、最初のケース、ラベルには、あなたの最初のケースでは、それはこのように、文字列になります文字列であるため正しく表示されます。後者の場合、Flexはオブジェクト上でtoString()メソッドを実行し、表示されている[Object object]モニカを返します。

一つのitemRendererでこれを行うには、テキストが、あなたのラベルに設定されている方法を更新する必要があります。あなたが持っているデータの種類を確認し、dataChangeイベントハンドラで)たItemRendererコンポーネント 3にdataChangeイベントを聴く)ラベル 2から結合テキスト属性を削除します)

1:手順は、このようなものですこれを使用して、データ型に基づいてLabel上のテキスト値を条件付きで設定します。

これは、擬似コードであるが、これはその要旨

<fx:Script> 
    protected function onDataChange(event:Event):void{ 
     if(data is Object){ 
     labelDisplay.text = data.DESC; 
     } else { 
     labelDisplay.text = data; 
     } 
    } 
</fx:Script> 
<s:states> 
    <s:State name="normal"/> 
    <s:State name="hovered"/> 
    <s:State name="selected"/> 
</s:states> 
<s:Label id="labelDisplay" backgroundColor.selected="#1B5790" color.selected="white" 
     backgroundColor.hovered="#E1DFD2" color.hovered="white" fontWeight.hovered="bold" 
     width="100%" height="25" paddingLeft="5" paddingTop="5" styleName="myLabelBlack" toolTip="{data}"/> 

<?xml version="1.0" encoding="utf-8"?> 

が多くあります[ツールチップを設定するために同じアプローチを使用してください]でありますしかし、これを別々に行う方法。それぞれのタイプのデータのonDataChangeイベントハンドラをオーバーライドして、基本コンポーネントでスーパークラスを作成して拡張することができます。次に、3つのコンポーネント(スーパーコンポーネント、文字列コンポーネントとしてのデータ、オブジェクトコンポーネントとしてのデータ)がありますが、大部分のコードを再利用しています。

2番目のdataProviderに明示的なオブジェクトタイプが定義されている場合は、カスタムtoString()メソッドを実装して説明を返し、定義した元のitemRendererを使用します。

関連する問題