Ошибка расширения ArrayCollection - PullRequest
2 голосов
/ 28 августа 2011

я расширяю класс ArrayCollection для добавления метода push

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 Ответ

3 голосов
/ 28 августа 2011

В вашем примере ...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
...