Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.01.2013, 13:27
pomuс вне форума Посмотреть профиль Отправить личное сообщение для pomuс Найти все сообщения от pomuс
  № 1  
Ответить с цитированием
pomuс

Регистрация: Sep 2012
Сообщений: 204
По умолчанию собственный слушатель событий

Приветствую!
Возникла потребность в отсылке событий между классами. А именно- есть класс в котором грузятся xml данные, и далее они распределяются по массивам.
В другом же классе мне надо поймать это событие распределения в массивы, и использовать данные массивов. А сейчас получается так, что этот класс сразу взял эти массивы, но они то пустые, и еще не заполнены.
Так вот, почитал я про собственные события, сделал как писал Мук.

в классе загрузки xml в функции распределения данных по массивам прописал

Код AS3:
private function arrayFill(value:XML):void {
			xmlData = value as XML;
			var xmlList:XMLList = xmlData.children();
			for (var i:int=0; i<xmlList.length(); i++) {
				var picID:String = xmlList[i].@id;
				idArr.push(picID);	
 
				dispatchEvent(new Event ("arrLoaded"));
			}
		}
в конструкторе класса, где нужно воспользоваться массивом прописал
Код AS3:
this.addEventListener("arrLoaded", getArr);
ну и далее сама функция обработки
Код AS3:
public function getArr(e:Event):void {
			trace (Page.idArr);
		}
ошибок не выдает, но массив не обрабатывается
В чем проблема, подскажите пожалуйста


Последний раз редактировалось pomuс; 24.01.2013 в 14:09.
Старый 24.01.2013, 13:52
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 2  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
1. Возможно нужно вынести dispatchEvent из цикла for
2. что такое idArr?
3. что такое Page ?
__________________
adobe AS3 manual

Старый 24.01.2013, 13:55
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 3  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
в конструкторе класса, где нужно воспользоваться массивом прописал
Насколько я понял, Вы подписываетесь на событие "arrLoaded" у класса, который его не распространяет.
Надо подписываться не у this, а у объекта, который делает dispatchEvent(new Event ("arrLoaded"));

Старый 24.01.2013, 13:58
pomuс вне форума Посмотреть профиль Отправить личное сообщение для pomuс Найти все сообщения от pomuс
  № 4  
Ответить с цитированием
pomuс

Регистрация: Sep 2012
Сообщений: 204
Цитата:
Сообщение от strangedk Посмотреть сообщение
1. Возможно нужно вынести dispatchEvent из цикла for
2. что такое idArr?
3. что такое Page ?
1- не помогло
2- idArr это public static idArr:Array
3- Page это класс, где обрабатывается xml и заполняется массив

expl
а так какой же тогда смыл в этом? ловить событие в том же классе. Ну смысл есть но в моем случае это не подходит. Мне же в другом классе надо определить момент, когда в этом классе загрузится все что мне надо.

Старый 24.01.2013, 13:59
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 5  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
каким образом происходит подписка класса A на событие, которое отправляет класс B?
__________________
местонахождение

Старый 24.01.2013, 14:02
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 6  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Цитата:
Сообщение от pomuс Посмотреть сообщение
1- не помогло
2- idArr это public static idArr:Array
3- Page это класс, где обрабатывается xml и заполняется массив
Так а что вы тогда хотите увидеть в Page.urlArr, если у вас заполняется массив idArr
__________________
adobe AS3 manual

Старый 24.01.2013, 14:08
pomuс вне форума Посмотреть профиль Отправить личное сообщение для pomuс Найти все сообщения от pomuс
  № 7  
Ответить с цитированием
pomuс

Регистрация: Sep 2012
Сообщений: 204
СлаваRа в смысле? я же вроде указал это в самом первом посте. Событие создается в классе А по завершению заполнения, а в классе В вешается слушатель.
strangedk там всего 3 массива, в том числе urlArr и idArr. Просто сократил код, и удалил не то, поправил

p.s. может я не понимаю какой то концептуальной вещи?

Старый 24.01.2013, 14:12
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 8  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Возможно слушатель добавялется уже после отработки кода с отсылкой события.
Да, и кстати, вот этот код
Код AS3:
trace (Page.idArr);
ничего не покажет в трейсе, если массив пустой.
Так что хотя бы какую-то строку надо добавить, чтобы убедиться что трейс срабатывает вообще
Код AS3:
trace ("ARRAY:", Page.idArr);

Старый 24.01.2013, 14:21
pomuс вне форума Посмотреть профиль Отправить личное сообщение для pomuс Найти все сообщения от pomuс
  № 9  
Ответить с цитированием
pomuс

Регистрация: Sep 2012
Сообщений: 204
caseyryan так, ну на то же он и слушатель, разве нет? к примеру если я вешаю слушатель на кнопку, естественно что он вешается, и потом слушает это событие клика, например.

Кстати сделала трейс указали- не выводится ничего, - следовательно событие не проходит

Старый 24.01.2013, 14:22
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 10  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Код AS3:
package {
	import flash.display.Sprite;
	import flash.events.Event;
 
	/**
	 * @author SlavaRa
	 */
	public class Main extends Sprite {
 
		public function Main():void {
			super();
			if (super.stage) {
				this.onSuperAddedToStage();
			} else {
				super.addEventListener(Event.ADDED_TO_STAGE, this.onSuperAddedToStage);
			}
		}
 
		private function onSuperAddedToStage(e:Event = null):void {
			super.removeEventListener(Event.ADDED_TO_STAGE, this.onSuperAddedToStage);
			// entry point
			var a:A = new A();
			var b:B = new B(a);
			a.setArray([1, 2, 3, 4]);
		}
 
	}
 
}
 
import flash.events.Event;
import flash.events.EventDispatcher;
 
class A extends EventDispatcher {
	public function A() {
		super();
	}
 
	private var _array:Array;
 
	public function setArray(array:Array):void {
		this._array = array;
		super.dispatchEvent(new Event(Event.COMPLETE));
	}
 
	public function get array():Array {
		return _array;
	}
}
 
class B {
	public function B(a:A) {
		super();
		this._a = a;
		this._a.addEventListener(Event.COMPLETE, onAComplete);
	}
 
	private var _a:A;
 
	private function onAComplete(event:Event):void {
		trace("array:", this._a.array); //array: 1,2,3,4
	}
}
у меня все работает
__________________
местонахождение

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 14:29.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.