Как вызвать пользовательское событие в ActionScript 3.0 из другого класса - PullRequest
0 голосов
/ 13 ноября 2010

Я хочу создать пользовательское событие, и оно будет доступно любому другому классу.Предположим, у меня есть NavigationMenuClass.as, который содержит некоторое next, prev buttons, и другой класс для Page.as, который должен показывать определенную страницу при каждом нажатии кнопки next или prev.И мне нужно создать пользовательское событие (напишет EVENTClass.as для управления всеми подобными событиями.) С именем "showPage", и когда это событие произойдет, должна быть вызвана функция-член класса Page.as.

private function nextPress(event:Event) {
    //dispatchEvent(new Event("showPage"));
    // this will call the Page class Menmber function page:Page = new Page; page.showNextPage();
}

Если передать объект, как я могу вызвать конкретную функцию-член, используя методы Event и Event Dispatcher.

Ответы [ 2 ]

5 голосов
/ 13 ноября 2010

Вы, кажется, немного смущены.

Итак, у вас есть иерархия отображения, в которой ваш экранный объект Page.as является родительским для NavigationMenuClass.as, верно?

Ваш NavigationMenuClass должен отправлять события для «следующего» и «предыдущего». Класс Page должен прослушивать эти события и что-то делать.

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

private function nextPress(event:Event) {
    // dispatchEvent(new Event("showPage"));
    // this will call the Page class Menmber function page:Page = new Page; page.showNextPage();
    dispatchEvent(new Event("next"));
}

На вашей странице вы просто добавляете прослушиватель событий:

navigationMenuClassInstance.addEventListener('next', onNext);
public function onNext(event:Event):void{
  // write code to change content
}

Вы можете использовать тот же подход для реализации предыдущего события. Чтобы ответить на несколько ваших "странных формулировок"

Я хочу создать собственное событие, и оно будет доступен любому другому классу

Я не уверен, что вы подразумеваете под доступным.
Вы можете создать собственный класс событий, который расширяет Event, и любой другой класс может использовать его, если он импортирует его. Мой пример выше не создает пользовательский класс событий, но использует класс событий по умолчанию.

С точки зрения диспетчеризации, событие отправляется только до своего «родителя». Если событие вспыхнет, оно перейдет к своему родительскому родителю, потом к родительскому родителю и так далее до самой стадии.

Как передать объект, как я могу вызвать конкретную функцию-член используя Event и Event Dispatcher методы.

Я не уверен, что вы подразумеваете под "передачей объекта" здесь. Когда вы отправляете событие, этот класс событий всегда доступен для прослушивателя событий в качестве аргумента этого метода прослушивателя событий. Это похоже на прохождение объекта.

1 голос
/ 14 ноября 2010

Также, следуя превосходному руководству Flextras, убедитесь, что NavigationMenuClass расширяет EventDispatcher, иначе просто вызов метода dispatchEvent () не будет работать!

...