ArrayCollection扩展错误

时间:2011-08-27 22:55:40

标签: arrays flex actionscript-3 oop

我为添加推送方法扩展了ArrayCollection类

package com.cargo.collections
{
    import mx.collections.ArrayCollection;

    public class DataCollection extends ArrayCollection {

        public function DataCollection(source:Array = null) {
            super(source);
        }

        public function push(...parameters):uint {
            var i:uint = source.push(parameters);
            this.refresh();
            return i;
        }
    }
}

但推送的数据是数组:/

var test:DataCollection = new DataCollection({id: 1});
test.source.push({id: 2});
test.push({id: 3});

输出

test = Array( {id: 1}, {id: 2}, Array({id: 3}) )

1 个答案:

答案 0 :(得分:3)

在您的示例中,...parameters创建一个包含传递给该函数的所有参数的数组。这应该按预期工作:

public function push(...parameters):uint {
    var i:uint = source.push(parameters[0]);
    this.refresh();
    return i;
}

或者,如果您的目的是启用多个参数的推送,则可以使用Function.apply()方法,该方法将给定数组转换为多个参数:

public function push(...parameters):uint {
    var i:uint = source.push.apply(null,parameters);
    this.refresh();
    return i;
}

这相当于说

var i:uint = source.push(parameters[0],parameters[1],parameters[2]);  // etc