![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2012
Сообщений: 204
|
Приветствую!
Возникла потребность в отсылке событий между классами. А именно- есть класс в котором грузятся xml данные, и далее они распределяются по массивам. В другом же классе мне надо поймать это событие распределения в массивы, и использовать данные массивов. А сейчас получается так, что этот класс сразу взял эти массивы, но они то пустые, и еще не заполнены. Так вот, почитал я про собственные события, сделал как писал Мук. в классе загрузки xml в функции распределения данных по массивам прописал 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")); } } ну и далее сама функция обработки ошибок не выдает, но массив не обрабатывается В чем проблема, подскажите пожалуйста Последний раз редактировалось pomuс; 24.01.2013 в 14:09. |
|
|||||
|
1. Возможно нужно вынести dispatchEvent из цикла for
2. что такое idArr? 3. что такое Page ?
__________________
adobe AS3 manual |
|
|||||
|
Цитата:
Надо подписываться не у this, а у объекта, который делает dispatchEvent(new Event ("arrLoaded")); |
|
|||||
|
Регистрация: Sep 2012
Сообщений: 204
|
Цитата:
2- idArr это public static idArr:Array 3- Page это класс, где обрабатывается xml и заполняется массив expl а так какой же тогда смыл в этом? ловить событие в том же классе. Ну смысл есть но в моем случае это не подходит. Мне же в другом классе надо определить момент, когда в этом классе загрузится все что мне надо. |
|
|||||
|
каким образом происходит подписка класса A на событие, которое отправляет класс B?
__________________
местонахождение |
|
|||||
|
Так а что вы тогда хотите увидеть в Page.urlArr, если у вас заполняется массив idArr
__________________
adobe AS3 manual |
|
|||||
|
Регистрация: Sep 2012
Сообщений: 204
|
СлаваRа в смысле? я же вроде указал это в самом первом посте. Событие создается в классе А по завершению заполнения, а в классе В вешается слушатель.
strangedk там всего 3 массива, в том числе urlArr и idArr. Просто сократил код, и удалил не то, поправил p.s. может я не понимаю какой то концептуальной вещи? |
|
|||||
|
Возможно слушатель добавялется уже после отработки кода с отсылкой события.
Да, и кстати, вот этот код ничего не покажет в трейсе, если массив пустой. Так что хотя бы какую-то строку надо добавить, чтобы убедиться что трейс срабатывает вообще |
|
|||||
|
Регистрация: Sep 2012
Сообщений: 204
|
caseyryan так, ну на то же он и слушатель, разве нет? к примеру если я вешаю слушатель на кнопку, естественно что он вешается, и потом слушает это событие клика, например.
Кстати сделала трейс указали- не выводится ничего, - следовательно событие не проходит |
|
|||||
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, время: 18:11. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|