добавление пользовательского прослушивателя событий в as3 - PullRequest
5 голосов
/ 25 мая 2009

Я много читал на форумах и в учебных пособиях, но я все еще не могу обернуть свои мысли вокруг событий и слушателей событий. У меня есть довольно простой пример, но я не могу заставить его работать.

У меня есть arrayCollection пользовательских объектов в ретрансляторе, при щелчке по одному из этих объектов я хочу, чтобы другой компонент отображал данные, связанные с этим объектом.

Вот что у меня есть, но слушатель никогда не отвечает (хотя диспетчер, кажется, работает, потому что новое событие создано, и я вижу трассировку с правильным выводом.) Я подозреваю, что это потому, что когда я вызываю addEvent Listener Я делаю это не на том объекте. Насколько я понимаю, объект, который будет отображать данные объекта, является объектом, который должен иметь прослушиватель событий и прослушивать все события такого рода, но, возможно, я неправильно понял.

Мое пользовательское событие:

public class SelectObjectEvent extends Event
    {
        public function SelectObjectEvent(customEventString:String, myObject:customObject)
        {
              super(customEventString, true, false);
              trace(customEventString+" "+myObject);
        }
    }
}

Мой пользовательский объект имеет следующую функцию, которая вызывается при нажатии:

public function selectObject(myObject:customObject):void
        {
            dispatchEvent(new SelectObjectEvent("OBJECT_SELECTED", customObject));              
        }

И компонент, который я хочу отобразить выбранный объект, имеет следующий конструктор:

public function SelectedObjectDisplayClass()
        {
            addEventListener("OBJECT_SELECTED", this.showObject)
        }

        public function showObject(event:Event):void
            {  
            trace("Show object: "+event); 
        } 

Ответы [ 2 ]

3 голосов
/ 25 мая 2009

Не совсем ясно, где находятся ваши последние два фрагмента кода, но похоже, что вам нужно вызывать addEventListener для объекта, который расширяет EventDispatcher.

То есть, если ваш второй блок принадлежит пользовательскому объекту с именем Clickable, который расширяет EventDispatcher и вызывает при щелчке dispatchEvent(), тогда ваш компонент должен вызывать myClickable.addEventListener(...), где myClickable является экземпляром Clickable. Имеет ли это смысл?

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

0 голосов
/ 27 мая 2009

Просто бегло взгляните на код и обратите внимание, что второй параметр dispatchEvent - это класс, а не экземпляр объекта. Разве это не должно быть myObject?

public function selectObject(myObject:customObject):void
        {
                dispatchEvent(new SelectObjectEvent("OBJECT_SELECTED", **customObject**));                          
        }
...