1

私は解決できない特定の問題に直面しています。Robotlegs フレームワークで ActionScript 3 を使用しています。コマンドで一連の URL リクエストを作成する必要があります。各 URL には画像が表示されます。これらの画像を A​​rrayCollection にプッシュし、この ArrayCollection をペイロードとしてイベントをディスパッチしています。この ArrayCollection は、itemRenderer を使用して画像を表示するビューに送信されます。画像が ArrayCollection に読み込まれていることを確認しましたが、画像がビューに表示されていません。

これは私がコマンドに書いたものです、

var arrayCollect:ArrayCollection = new ArrayCollection();
var my_loader:Loader = new Loader();

my_loader.load( new URLRequest( "http://www.joomlaworks.net/images/demos/galleries/abstract/7.jpg" ) );
arrayCollect.addItem(my_loader as Object );
my_loader.load( new URLRequest( "http://www.joomlaworks.net/images/demos/galleries/abstract/8.jpg" ) );
arrayCollect.addItem(my_loader as Object );

return arrayCollect;

次に、arrayCollect がイベントでペイロードとしてディスパッチされます。

dispatch( new XYZEvent ( XYZEvent.LOAD_COMPLETE, arrayCollect ) );

ビューでは、itemRenderer を使用しました。

<s:List id="pqr"
dataProvider="{data}">

....
</s:List>

画像が表示されていません。問題は、arrayCollection 内のデータが「ローダー」タイプのオブジェクトであることだと思います。そのため、BitmapImage として型キャストしようとしましたが、問題は解決しませんでした。

これを解決するのを手伝ってください。

4

1 に答える 1

2

あなたの問題は、データを表示できるアイテムレンダラーを定義していないことです。カスタムアイテムレンダラーの作成については、 http: //help.adobe.com/en_US/Flex/4.0/UsingSDK/WS03d33b8076db57b9-23c04461124bbeca597-8000.html を参照してください。

次: あなたの ArrayCollection では、新しいローダーを作成しませんでした。ArrayCollection アイテム 1 がアイテム 2 と同じローダーを指していることを意味します。

レンダラーを使用しないリストとカスタム レンダラーを使用するリストの 2 つのリストの例を追加しました。ローダーは使用しませんでしたが、もちろん、Flex イメージ コンポーネントを使用する代わりに、ディスプレイにローダーを追加するレンダラーを作成することもできます。

主な用途:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                   xmlns:s="library://ns.adobe.com/flex/spark" 
                   xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;

        private var _dataProviderList : ArrayCollection = new ArrayCollection(
            [
                "http://www.joomlaworks.net/images/demos/galleries/abstract/7.jpg",
                "http://www.joomlaworks.net/images/demos/galleries/abstract/8.jpg"
            ]
        );

    ]]>
</fx:Script>

<s:layout>
    <s:VerticalLayout/>
</s:layout> 

<s:List dataProvider="{_dataProviderList}">

</s:List>

<s:List itemRenderer="ImageItemRenderer" dataProvider="{_dataProviderList}">

</s:List>

</s:WindowedApplication>

レンダラー

<?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">


<mx:Image 
          source="{data}" 
          width="50" height="50"/>

</s:ItemRenderer>

ArrayCollection のオブジェクトとしてローダーを本当に使用したい場合は、レンダラーを次のように記述できます。

<?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">

<fx:Script>
    <![CDATA[

        [Bindable]
        private var _loader : Loader;

        private function dataLoaded (evt : Event) : void
        {
            _loader = (data as Loader) 
        }

        override public function set data(value:Object):void
        {
            super.data = value;

            if (data is Loader) {
                // render items may be reuses (http://stackoverflow.com/questions/7328989/itemrenderer-switching-urlloader-images)
                (data as Loader).contentLoaderInfo.removeEventListener(Event.COMPLETE, dataLoaded);

                // data allready loaded
                if ((data as Loader).content) {
                    _loader = (data as Loader)
                }
                else {
                    // wait till data is loaded
                    (data as Loader).contentLoaderInfo.addEventListener(Event.COMPLETE,dataLoaded);
                }
            }
        }
    ]]>
</fx:Script>

<mx:Image 
    source="{_loader}" 
    width="50" height="50"/>



</s:ItemRenderer>
于 2014-07-07T07:49:59.827 に答える