List Actionscript中的火花列表:通过布局&;Constructor中的itemRenderer
我正在尝试创建一个通用列表,在其中可以将布局和项目渲染器作为参数传递 因为不可能将参数传递给MXML组件的构造函数,所以我想我应该在Actionscript中创建我的列表 我想应该是这样的:List Actionscript中的火花列表:通过布局&;Constructor中的itemRenderer,list,actionscript,parameters,List,Actionscript,Parameters,我正在尝试创建一个通用列表,在其中可以将布局和项目渲染器作为参数传递 因为不可能将参数传递给MXML组件的构造函数,所以我想我应该在Actionscript中创建我的列表 我想应该是这样的: public class GenericList extends List { public function GenericList(iR:ItemRenderer, ac:ArrayCollection, layout:LayoutBase) { super(); this.d
public class GenericList extends List {
public function GenericList(iR:ItemRenderer, ac:ArrayCollection, layout:LayoutBase) {
super();
this.dataProvider = ac;
this.layout = ... // don't even have access to this.layout
this.itemRenderer = iR // Cannot pass itemRender
}
public function GenericList(cf:ClassFactory, ac:ArrayCollection, layout:LayoutBase) {
我更喜欢使用MXML格式的列表(因为以后使用状态会更容易),但是如果我被迫使用纯Actionscript以便可以实例化它并传入参数,那么任何帮助都会大有帮助。您无法设置列表的itemRenderer属性,必须实现IClassFactory。因此,您的作业如下所示:
public class GenericList extends List {
public function GenericList(iR:ItemRenderer, ac:ArrayCollection, layout:LayoutBase) {
super();
this.dataProvider = ac;
this.layout = ... // don't even have access to this.layout
this.itemRenderer = iR // Cannot pass itemRender
}
public function GenericList(cf:ClassFactory, ac:ArrayCollection, layout:LayoutBase) {
实例化将是:
var myList:GenericList = new GenericList( new ClassFactory( com.company.renderers.MyItemRenderer, ....);
关于布局: 列表本质上包装了数据组,所以您需要访问数据组的布局。但是,数据组不一定要实例化。因此,您可能必须创建一个私有属性,然后在commitProperties中使用它
private var _myLayout:LayoutBase; (populate in constructor via getter/setter)
protected var layoutInvalidated:Boolean;
public function set myLayout( layout:LayoutBase):void {
_myLayout = layout;
layoutInvalidated = true;
}
override protected function commitProperties():void {
super.commitProperties();
if( layoutInvalidated && dataGroup && dataGroup.layout ) {
layoutInvalidated = false;
dataGroup.layout = _myLayout;
}
}