2009-07-22 16 views
0

私はFlexを使用して小さなフォームを作成しています。私が今持っているのはListコンポーネントで、フォント名のリストを取りたいものです。配列内のオブジェクトの特定のプロパティへのバインド

私はフォントを使用していますFont.enumerateFonts(true);。これにより、のflash.text.Fontオブジェクトが返されます。

Fontオブジェクトには、フォント名の文字列であるfontNameプロパティがあります。

私の問題は、配列の各FontオブジェクトのfontNameプロパティにListのdataProviderをバインドする方法がわかりません。

バインディングだけでこれを行う方法はありますか? Fontオブジェクトをループして新しいString配列を作成しないでください。

答えて

3

おそらく、リストコントロールのlabelFieldプロパティを探しています。ここでは作業例を示します。

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="onInitialize()"> 

    <mx:Script> 
     <![CDATA[ 

      import mx.collections.ArrayCollection; 

      [Bindable] 
      private var fonts:ArrayCollection; 

      private function onInitialize():void 
      { 
       fonts = new ArrayCollection(Font.enumerateFonts(true)); 
      } 

     ]]> 
    </mx:Script> 

    <mx:List dataProvider="{fonts}" labelField="fontName" /> 

</mx:Application> 

はまた、配列は、あなたが期待している方法で、バインディングをサポートしていないので、私は、(配列ではなく)の結合のためのArrayCollectionを使用していますことに注意してください。

希望に役立ちます!質問があれば、返信してください。

+0

これは素晴らしい動作です!私はdataProviderバインディング内でそれをすべて実行しようとしていましたが、ArrayCollectionを使用していました。どのようにそれが働いているのをもう少し説明してもよろしいですか?どのようにして、fontNameプロパティの各Fontオブジェクトの内部を調べることができますか? –

+1

うれしかったよ! ListFieldプロパティは、「データプロバイダ内のフィールドの名前(例:flash.text.Font)」アイテムを指定します(リストが派生するmx.controls.listClasses.ListBase)デフォルトでは、Listは各アイテムの 'label'という名前のプロパティを探して表示しますが、データオブジェクトにlabelプロパティが含まれていない場合は、labelFieldプロパティで異なるプロパティを使用するように設定できます。データベースから取得された一連の人名を表示すると、 'FullName' [または 'fontName']という例があります。 –

+0

これは完璧です!ご協力いただきありがとうございます。私はあなたの答えとコメントに喜んで投票しました。私は本当にドキュメントをチェックする必要があります:) –

関連する問題