我通过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;
}
}
答案 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生命周期和布局系统,它可能无法正常运行。