Как передать массив аргументов ... rest другой функции как свойство объекта в flash actionscript 3? - PullRequest
0 голосов
/ 17 ноября 2009

У меня есть функция, которая использует аргумент ... rest следующим образом:

public function dispatchActions(... actions):void
    {
        var params:Object = new Object();       
        params.actions = actions; // I also tried casting ie. = (actions as Array)

        this.target.dispatchEvent(new ActionEvent(ActionEvent.dispatchActions, params));
    }

Я звоню, используя myActionObject.dispatchActions("all");

Проблема в том, что когда слушатель получает отправленный объект params и пытается получить доступ к массиву действий, он ничего не делает. Если я пытаюсь отследить evt.params.actions, то трассировка остается пустой, а если я пытаюсь отследить evt.params.actions[0], она отслеживает неопределенное значение.

например:

    function actionsListener(evt:ActionEvent):void
    {
        var actions:Array = (evt.params.actions) as Array; // I also tried without casting

        trace("actions", actions, "actions 0", actions[0], "action 1", actions[1]);
    }

Это вывод: действия действия 0 неопределенные действия 1 неопределенные

Что здесь не так? Я не понимаю, почему я не могу передать аргумент ... rest через объект в качестве параметра события. Как я могу сделать эту работу?

Спасибо.

Ответы [ 3 ]

1 голос
/ 17 ноября 2009

Или вы можете просто сделать это:

<code>sample("as", "asd");
private function sample(... actions):void
{
    sample1(actions);
}
private function sample1(o:Array):void
{
    trace(o[1]);//traces asd
}
1 голос
/ 17 ноября 2009

Похоже, ваш объект params не отправляется с событием должным образом ... Я так понимаю ActionEvent это ваше собственное событие - вы проверили, что:

1) вы правильно передаете объект params в конструктор событий?

например:

class ActionEvent extends Event{
    public var params:Object;
    public function ActionEvent(type:String, params:Object){
        super(type);
        this.params = params;
    }
}

2) если вы повторно отправляете событие, вы определили функцию clone, чтобы гарантировать, что ваш params также будет клонирован?

 override public function clone():Event{
    return new ActionEvent(type,params);
}
1 голос
/ 17 ноября 2009

Это работает для меня:

sample("as", "asd");
private function sample(... actions):void
{
    var o:Object = {};
    o.array = actions;
    sample1(o);
}
private function sample1(o:Object):void
{
    trace(o.array[1]);//traces asd
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...