Сценарий действия: при автоматическом связывании прослушивателей событий функционирует только последний из списка ..? - PullRequest
0 голосов
/ 17 января 2011

Вот фрагмент кода:

protected function handleTriggers(raw:Object) : void
{
    var name:String, value:String, map:Object;

    map = {
            'onclick':      MouseEvent.CLICK,
            'ondblclick':   MouseEvent.DOUBLE_CLICK,
            'onmousedown':  MouseEvent.MOUSE_DOWN,
            'onmouseup':    MouseEvent.MOUSE_UP,
            'onmouseleave': MouseEvent.ROLL_OUT,
            'onrollout':    MouseEvent.ROLL_OUT,
            'onmouseenter': MouseEvent.ROLL_OVER, 
            'onrollover':   MouseEvent.ROLL_OVER,
            'onmouseover':  MouseEvent.MOUSE_OVER,
            'onmouseout':   MouseEvent.MOUSE_OUT,
            'onmousemove':  MouseEvent.MOUSE_MOVE
    };

    for (name in raw) 
    {
        value = raw[name];
        if (name in map) {
            var cloneValue:String = value;
            object.addEventListener(map[name], function(event:* = null) : void {
                execute(cloneValue, event); 
            });
        }
    }
}

объект является универсальным объектом DisplayObject и raw объект содержитсерия триггеров событий onclick, onmouseover и т. д.Это означало, что я мог подключать прослушиватели событий автоматически, следуя свойствам этого необработанного объекта.И кажется, что это работает, поскольку я действительно вижу некоторые функции слушателя в свойстве listeners объекта DisplayObject, и их количество соответствует количеству триггеров.Но позже, когда все выходит на сцену, запускается только последний обработчик событий.

Кто-нибудь знает, почему это может произойти?

1 Ответ

2 голосов
/ 17 января 2011

Ваша проблема похожа на эту. Поскольку вы добавляете встроенную функцию в качестве обработчика событий, clonevalue всегда имеет значение последнего значения в raw.

Я думаюэто должно работать (не проверено):

object.addEventListener(map[name], function(cloneValue : String) : Function {
    return function(event:* = null) : void {
         execute(cloneValue, event);
    };
})(cloneValue);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...