0

私はflashbuilder 4.6で作業しており、flashbuilder内のデータ/サービス機能でセットアップされたXMLサービス(外部URL)からデータをプルするリストコンポーネントを使用する簡単なアプリを進行中です。

現在、xml アイテムの「名前」を表示するだけの比較的単純なリストがあります。

<s:List id="list1" x="0" y="108" width="320" height="355" change="list1_changeHandler(event)"
        creationComplete="list1_creationCompleteHandler(event)" labelField="Itemname">
     <s:AsyncListView list="{getDataResult.lastResult}"/>
</s:List>

... サムネイル画像への完全な URL (http:// ... .jpg) である別の xml ノード/データ要素があります。その画像を「名前」要素の左側に配置したいと思います.

次のようなものを使ってみましたが、うまくいきません。私がオンラインで見つけた情報は、アイテムレンダラーを理解するのにあまり役に立ちませんでした(これは私が使用する必要があると思います)。

<s:List id="list1" x="0" y="108" width="320" height="355" change="list1_changeHandler(event)"
        creationComplete="list1_creationCompleteHandler(event)" labelField="Itemname">
     <s:AsyncListView list="{getDataResult.lastResult}"/>
             <mx:itemRenderer>
                 <mx:Component> 
                     <mx:Label text="Itemname"/>
                     <mx:Image source="ItemImageURL"/>
                 </mx:Component>
             </mx:itemRenderer>
</s:List>

アイテムレンダラーなしでこれを行う方法はありますか? それともそれが唯一の方法ですか?私の試みは、リストコンポーネントにサムネイル画像を実装する適切な方法にまったく近いものでしたか? 誰かがここで提供できる助けをありがとう。

4

1 に答える 1

1

あなたが提供したコードは、コンパイラ エラーが予想されるような方法で Spark と MX コンポーネントを組み合わせています。まず、次の問題があります。

  • これmx:itemRendererは、コンポーネントのプロパティを定義するために使用される構文です。そのため、コンポーネントの itemRender プロパティの値を定義するために使用されますs:List。名前空間が異なるため、コンパイラ エラーが発生します。s:itemRenderer代わりに指定する必要があります。
  • mx:Component、新しいインライン コンポーネントを定義するために使用されます。ただし、名前空間が間違っています。Flex 4.6 では、mx 名前空間ではなく、fx 名前空間を指定する必要があります。
  • タグの子として 2 つのコンポーネントがリストされていますがmx:Component、それらは 1 のみである必要があります。これに対する MX の世界での解決策は、コンテナ内のラベルとイメージをラップすることです。Spark の世界では、itemRenderer はItemRendererクラスを拡張する必要があります。
  • テキストとソースについては、文字列リテラルを指定しています。データ要素の変数ではありません。

あなたは正しい考えを持っています。しかし、間違った実行。itemRenderers の作成に関するこの情報をお読みください。

私はあなたのコードを次のように作り直します:

<s:List id="list1" x="0" y="108" width="320" height="355" change="list1_changeHandler(event)"
        creationComplete="list1_creationCompleteHandler(event)" >
     <s:AsyncListView list="{getDataResult.lastResult}"/>
             <s:itemRenderer>
                 <fx:Component> 
                    <s:ItemRenderer dataChange="onDataChange()">
                      <fx:Script>
                        <![CDATA[
                          protected function onDataChange():void{
                             labelDisplay.text =data.Itemname
                             imageDisplay.source = data.ItemImageURL
                          }
                        ]]>
                      </fx:Script>
                      <s:HGroup>
                       <s:Label id="labelDisplay" />
                       <s:Image id="imageDisplay" />
                      </s:HGroup>
                    </s:ItemRenderer>
                 </fx:Component>
             </s:itemRenderer>
</s:List>

これは私がブラウザで書いた未テストのコードです。ただし、正しいアプローチを示す必要があります。名前空間は正しいです。itemRenderer として定義された単一のコンポーネントがあり、ItemRenderer クラスを拡張します。リストをスクロールするときなど、itemRenderer データが変更されると、表示される項目が更新されます。また、2 つのアイテムが重ならないように配置されています。

于 2013-02-20T03:21:39.463 に答える