如何在swc内部使用中继器

时间:2011-11-04 10:46:35

标签: flex repeater swc

我通过Flash CS5构建一个swc文件包含一些接口组件,如TextInput,Label。 然后我在flex程序中使用它。

但是当我想为这个组件使用flex中继器时,我遇到了这个问题。

以下是我自己在使用Flash CS的swc文件中定义的组件。

package {
    import fl.controls.TextInput;
    ......

    public dynamic class MyWindow extends UIMovieClip {
        public var txt1 : TextInput;
        ......
        }
    }
}

然后我在我的flex程序中使用它:

<local:MyWindow id="myWindow"/>
<fx:Script>
    <![CDATA[
        ......
        private function Init() : void {
            myWindow.txt1.text = "myText";
        }
        ......
    ]]>
 </fx:Script>

效果很好。

但是如何直接在mxml中使用txt1?像这样:

<local:MyWindow id="myWindow" txt1.text="myText"/>

我知道它不起作用,但我想使用repeater创建一些类似的MyWindow,它需要绑定dataProvider。我写了这样的flex代码:

<mx:VBox>
    <mx:Repeater x="10" y="10" id="multiWindow">
        <local:MyWindow txt1.text="{multiWindow.currentItem}"/>
    </mx:Repeater>
</mx:VBox>

但它不起作用。

有谁知道如何让它发挥作用?感谢。

=============================================== ==================================

更新代码,multiWindow完整代码是:

package {
import fl.controls.TextInput;

import mx.flash.UIMovieClip;

import flash.display.DisplayObject;
import flash.events.EventDispatcher;
import flash.display.Sprite;
import flash.display.InteractiveObject;
import flash.display.MovieClip;
import flash.display.DisplayObjectContainer;

public dynamic class MyWindow extends UIMovieClip {
    public var txt1 : TextInput;
    public var txt2 : TextInput;
    public var txt3 : TextInput;
}
}

1 个答案:

答案 0 :(得分:1)

要与MX容器一起使用的任何组件都需要实现IUIComponent。我相信Flash有一个内置的基类,可以扩展用于Flex,但你也可以这样做:

<mx:VBox>
     <mx:Repeater x="10" y="10" id="multiWindow">
         <mx:UIComponent>
             <local:MyWindow txt1.text="{multiWindow.currentItem}"/>
         </mx:UIComponent>
     </mx:Repeater> 
</mx:VBox>

请注意,如果您没有考虑Flex Component生命周期和布局系统,它可能无法正常运行。