0

Webサイトのページにカバーフローレイアウトを使用しようとしています。つまり、リスト内の各アイテムは画像やパネルではなく、ページ全体です。ページは基本的にカスタムコンポーネントです。

私が欲しいのは、実行時にItemRenderer内でカスタムコンポーネントのインスタンスを作成できるようにすることです。たとえば、これはCoverflowレイアウトを表示するためのコードです。

<s:List id="pageList" depth="0" itemRenderer="com.helpdesk.proj.renderers.pageRenderer"
        dataProvider="{menuItems}" selectedIndex="{navigationButtonGroup.selectedIndex}" borderVisible="false" 
        x="5" y="200" width="100%" height="500">
    <s:layout>
        <layouts:CoverFlowLayout id="hdCoverflow"
                                 horizontalDistance="85"
                                 selectedItemProximity="50"
                                 selectedIndex="{pageList.selectedIndex}"
                                 depthDistance="1" 
                                 elementRotation="-70" 
                                 focalLength="300"
                                 perspectiveProjectionX="-1" 
                                 perspectiveProjectionY="-1"/>
    </s:layout>
</s:List>

リストのデータプロバイダーは、基本的に、上部のナビゲーションバーの名前(文字列)を含むオブジェクトの配列です(ホーム、アバウト、お問い合わせなど)。同じ名前のカスタムコンポーネントを作成しました。つまり、「home」、「about」などの名前のカスタムコンポーネントがあります。

したがって、アイテムレンダラーで、適切なカスタムコンポーネントのインスタンスを作成します。これまでのところ、これは私が持っているものです:

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

        import mx.core.UIComponent;
        import mx.events.FlexEvent;

        [Bindable]private var currItem:String = data.name;
        protected function itemrenderer1_creationCompleteHandler(event:FlexEvent):void
        {
            var myClass:Class = Class(getDefinitionByName(currItem));
            var mycomp:Object = new myClass();

        }

    ]]>
</fx:Script>    

「mycomp」が現在のカスタムコンポーネントのインスタンスを保持することを望んでいます。このオブジェクトをアプリケーションに追加するにはどうすればよいですか?parentDocument.addChildを試しましたが、エラーがスローされます。すべてを行う他の方法はありますか?

4

1 に答える 1

0

これを試して :

override protected function commitProperties():void {
    super.commitProperties();
    addCustomecomponent();
}

public function addCustomcomponent():void{

var myClass:Class = Class(getDefinitionByName(currItem));
            var mycomp:Object = new myClass();
    addElement(mycomp);   // addChild if you are using flex 3.6 or below

}
于 2012-01-07T06:30:46.383 に答える