Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Actionscript中的火花列表:通过布局&;Constructor中的itemRenderer_List_Actionscript_Parameters - Fatal编程技术网

List Actionscript中的火花列表:通过布局&;Constructor中的itemRenderer

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

我正在尝试创建一个通用列表,在其中可以将布局和项目渲染器作为参数传递

因为不可能将参数传递给MXML组件的构造函数,所以我想我应该在Actionscript中创建我的列表

我想应该是这样的:

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;
    }
}