0

これは非常に単純なことかもしれませんが、今のところ私はそれに対する解決策を置くことができません。これが私の問題の簡単な説明です:

私はクリップアートオブジェクトの辞書を次のように持っています:

clipartDict['cat'] = Cat; //Cat.mxml
clipartDict['dog'] = Dog; //Dog.mxml

Cat.mxml:

<s:Graphic>
    <s:Path x="2.86723" y="-0.000106812" data="M3.45943 80.3419C3.06051 77.3605 0.002399>
    </s:Path>
</s:Graphic>

MyView.mxml(関連コード):

<s:SkinnableDataContainer width="300" dataProvider="{clipArts}">
    <s:layout>
        <s:TileLayout requestedColumnCount="1"/>
    </s:layout>
    <s:itemRenderer>
        <fx:Component>
            <s:ItemRenderer>
                <fx:Script>
                    <![CDATA[
                        import models.vo.ClipArtVO;
                        // (data as ClipArtVO).clipArtFileName represents the 'key' in dictionary.
                        // Now, how can I display the relevent clipart from dict based on the key
                        // this.addElement throws an Type Coercion error

                    ]]>
                </fx:Script>

            </s:ItemRenderer>
        </fx:Component>
    </s:itemRenderer>
</s:SkinnableDataContainer>

誰かが私に解決策やそれを別の方法で実装するためのアイデアを提案できますか?ありがとう。

4

2 に答える 2

3

そのディクショナリに入れたのはクラス参照であり、インスタンスではありません。目的の Graphic のインスタンスを作成して、それを displayList に追加する必要があります。したがって、問題を解決するには2つの方法があります。

方法 1

Graphics のインスタンスをディクショナリに置きます (クラス参照の代わりに):

clipartDict['cat'] = new Cat();
clipartDict['dog'] = new Dog();

次に、それを displayList に追加するだけです。

var graphic:Graphic = clipartDict[(data as ClipArtVO).clipArtFileName];
addElement(graphic);

方法 2

その場でクラス参照のインスタンスを作成します。ディクショナリをそのまま保持します。

clipartDict['cat'] = Cat;
clipartDict['dog'] = Dog;

インスタンスを作成し、次のように displayList に追加します。

var Graphic:Class = clipartDict[(data as ClipArtVO).clipArtFileName];
addElement(new Graphic());
于 2012-06-07T11:37:13.223 に答える
0

SpriteVisualElement 内に cat.mxml ファイルをラップできるはずです。少し面倒ですが、基本的には次のようにします。

protected var sprite :SpriteVisualElement;
protected var class : Class;
protected var graphicInstance : Graphic;

protected function dataChangeMethod():void{
  // (data as ClipArtVO).clipArtFileName represents the 'key' in dictionary.
  // You told us about the key, but not the value. I'm assuming the value is an actual class
  // and not an instance of the class 
  class = (data as ClipArtVO).clipArtFileName;
  // create an instance of the class
  graphicInstance = new class();
  // create the new spriteVisualElement instance
  sprite = new SpriteVisualElement();
  // Add the graphic instance as a child to the spriteVisualElement
  // you may need to do any sizing of the graphicInstance before adding it
  sprite.addChild(graphicInstance);
  // add the Sprite Visual Element as a child to your container
  this.addElement(sprite);
}
于 2012-06-07T11:32:20.737 に答える