2009-08-12 13 views
1

は私が<s:List>コンポーネントを使用して、XMLファイルとしてdataProviderを指定したいのAdobe Flash Builderの4<s:List>コンポーネントのdataProviderをXMLファイルに設定するにはどうすればよいですか?

の最新ベータ版を持っています。

しかし、多くの研究(labs.adobe.comからのdocリンクを見ることを含む)の後、私はまだそれを行う方法を理解できません。

<?xml version="1.0" encoding="ISO-8859-1"?> 
<imageList> 
    <image location="path/to/file1.jpg" /> 
    <image location="path/to/file2.jpg" /> 
    <image location="path/to/file3.jpg" /> 
</imageList> 
+0

XMLをネットワーク経由でロードして、それをListまたはDataGridに表示しますか? –

+0

私は基本的に設定ファイルとして使用したいので、クライアントはコンポーネントに表示される画像を指定できます。 –

答えて

0

したがって、表示される画像を制御することができます。

私が投稿した最初の回答は、あとの解決策ではありませんでした。fx:XMLを使用すると、XMLファイルの内容が実際にSWFにコンパイルされるため、コンパイル後に変更できません。

私はJamesのソリューションを実装しました。

<?xml version="1.0" encoding="ISO-8859-1"?> 

<images> 
    <image source="path/to/image1.jpg" /> 
    <image source="path/to/image2.jpg" /> 
    <image source="path/to/image3.jpg" /> 
    <image source="path/to/image4.jpg" /> 
</images> 

MXML:

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

<s:Group 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/halo" 
    > 

    <fx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 

      protected function lstImages_creationCompleteHandler(event : FlexEvent) : void 
      { 
       dpHttpService.send(); 
      } 

     ]]> 

    </fx:Script> 

    <fx:Declarations> 

     <mx:HTTPService 
      id="dpHttpService" 
      url="images.xml" 
     /> 

    </fx:Declarations> 

    <s:List 
     id="lstImages" 
     dataProvider="{dpHttpService.lastResult.images.image}" 
     width="100%" 
     itemRenderer="path.to.render.ImageRenderer" 
     skinClass="path.to.skins.ListSkin" 
     > 

     <s:layout> 
      <s:HorizontalLayout gap="2" /> 
     </s:layout> 

    </s:List> 

</s:Group> 

と画像レンダラで、私はこのようなデータを参照してください。

XMLファイルには、次のようになります

<mx:Image 
    id="imgRendered" 
    source="{data.source}" 
/> 

本当にこのソリューションに関する有用なことは、私も完全なhttp://の参照を私が欲しいと思ったら他のサイト(もちろんcrossdomain.xmlを覚えている)。

実際、images.xmlファイルは別のサーバーに存在する可能性があります。

+0

奇妙な - この答えが役に立たないとマークされている理由はよくわかりません。どんなことを推測する?混乱している。 –

+0

ジェームズが寄稿した答えに基づいているときに、あなた自身の答えを最高のものとして選んだのは、人々が好きではないと思います。私はそれをマークしていますが、これは有用な答えです。 – Turadg

0

あなたがにXMLListCollectionクラスを使用する必要があります。

XMLファイルには、次のようになります。

<s:List dataProvider="{new XMLListCollection(data.image)}" labelField="@location"/> 
+0

外部のXMLファイルの内容を読み込むことができますか? –

+0

あなたのXMLをXMLListCollectionに変換します - XMLのソースは関係ありません。 –

2

リスト内の画像を表示したい場合、あなたは、URLLoaderクラスを使用してXMLをロードバインド可能な変数に格納し、あなたのリストにデータプロバイダとしてそれを割り当てる必要があります。リストはmx:itemrendererを使用して、必要に応じてビューをカスタマイズすることができます。

実際のコードがいろいろ書いこの

<fx:Script> 
    <![CDATA[ 
     import mx.collections.XMLListCollection; 
     import mx.collections.IList; 
     import mx.controls.Image; 

     private var loader : URLLoader = new URLLoader(); 

     [Bindable] 
     private var xml : XMLList; 

     private function init() : void 
     { 
      this.loader.addEventListener(Event.COMPLETE, onComplete); 
      this.loader.load(new URLRequest("data.xml")); 
     } 

     private function onComplete(evt : Event) :void 
     { 
      this.loader.removeEventListener(Event.COMPLETE, onComplete); 
      this.xml = new XML(this.loader.data).image; 
     } 

    ]]> 
</fx:Script> 

<mx:List id="list" width="200" height="500" dataProvider="{xml}"> 
    <mx:itemRenderer> 
     <fx:Component> 
      <mx:Image width="200" height="200" source="{[email protected]}" /> 
     </fx:Component> 
    </mx:itemRenderer> 
</mx:List> 

+0

これはうまくいきません - 私はコンポーネントを使用していて、IListインターフェイスを実装しているdataProviderしか受け付けません。 私の元の投稿を再読したところ、コンポーネントを使用していることが明確ではないことがわかりました。 –

-1

まあのようになり、私は1つの解決策を見つけました。

MXMLは、次のようになります。このような

<fx:Declarations> 

    <fx:XML 
     id="dpXml" 
     source="path/to/images.xml" 
    /> 

    <mx:XMLListCollection 
     id="dpXmlListCollection" 
     source="{dpXml.image}" 
    /> 

</fx:Declarations> 

<s:List 
    id="lstImages" 
    dataProvider="{dpXmlListCollection}" 
    itemRenderer="path.to.render.ImageRenderer" 
    skinClass="path.to.skins.ListSkin" 
    > 

    <s:layout> 
     <s:HorizontalLayout gap="2" /> 
    </s:layout> 

</s:List> 

とimages.xmlをすべてご回答のため

<?xml version="1.0" encoding="ISO-8859-1"?> 
<images> 
    <image> 
     <location>path/to/image1.jpg</location> 
    </image> 
    <image> 
     <location>path/to/image2.jpg</location> 
    </image> 
    <image> 
     <location>path/to/image3.jpg</location> 
    </image> 
</images> 

感謝を!

マット

+0

Ack。このソリューションはXMLファイルを結果のSWFに埋め込むように見えるため、コードがリリースされた後は設定できません。 次はJames Wardのソリューションを見てみましょう。 –

2

あなたが行うことができ、ネットワークを介してXMLファイルをロードしたい場合は:私の元の目的は、私のクライアントが自分自身を維持することができSWFに外部のXMLファイルを持っていることでした

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

    <fx:Declarations> 
     <mx:HTTPService id="srv" url="http://ws.jamesward.com/images.xml"/> 
    </fx:Declarations> 

    <s:applicationComplete> 
     srv.send(); 
    </s:applicationComplete> 

    <s:List dataProvider="{srv.lastResult.images.image}" width="100%" height="100%"> 
    <s:itemRenderer> 
     <fx:Component> 
     <mx:Image source="{data.source}"/> 
     </fx:Component> 
    </s:itemRenderer> 
    </s:List> 

</s:Application> 
+0

ねえ、ありがとう。 私はそれもやってみましょう - きちんとした解決策のように見えます(そして私が必要ならば代わりにローカルファイルを使うことができます)。 –

+0

ジェームズ、あなたがいるところにあります - それに感謝します。 あなたの回答を回答としてマークし、別の回答を作成して、どのように行ったかの詳細を表示します。 –

+0

奇妙な - あなたは1つ以上の答えを正しいことができないようです。 –

関連する問題