У меня есть небольшие флеш-приложения swf as3, которые загружаются с помощью основного приложения flex.отправка события с пузырьками по классу, которые не отображаются на сцене
Основное приложение Flex содержит SWFLoader, и я добавил прослушиватель событий на SWFLoader.content, чтобы получать настраиваемые события, которые я подготовил.
теперь, когда мне нравится в приложении, я использую функцию dispatchEvent
для создания события, и я уверен, что параметр bubbles события равен true. поэтому в этом случае событие пузырится на этапе до тех пор, пока оно не достигнет моего прослушивателя событий, и я могу правильно обработать событие.
проблема возникает, когда у меня есть статический класс, и я хочу отправить событие оттуда. потому что это статический класс, а не экранный объект, который появляется на моей стадии, у него нет места, где можно пузыриться, и из-за этого я не могу получить обычай даже в моем основном приложении flex.
Я попытался с помощью EventDispatcher со следующим кодом:
new EventDispatcher().dispatchEvent(new CustomEvent(CustomEvent.EVENT_setAttribute,{'attr_name':attrName,'attr_val':attrVal)));
Конструктор моего пользовательского события получает параметры, как 2-го параметра.
поэтому кажется, что когда я использую диспетчер событий, в событии все еще нет места, где можно пузыриться, и именно поэтому я не получаю его и в своем основном приложении.
Как я могу решить проблему? Мне нужно иметь возможность правильно отправлять событие на объекты, которые не отображаются на этапе.
main Мне нужно предоставить объект, который появляется на сцене для этой функции, чтобы использовать его для отправки события. Я надеюсь, что есть лучшее решение для решения этой проблемы.
вся информация была бы благодарна.
это мой пользовательский класс событий:
public class CustomEvent extends Event
{
public var command:String;
public var params:Object;
public static const CONTROL_TYPE:String = "eMyControl";
private static var EVENT_setAttribute:String = "set_attribute";
private static var gameAttributes:Object = new Object();
public static function setAttribute(attrName:String,attrVal:String):void {
gameAttributes[attrName]=attrVal;
new EventDispatcher().(new XpoEvent(XpoEvent.EVENT_setAttribute,{'attr_name':attrName,'attr_val':attrVal}));
}
public function CustomEvent(eventName:String, params:Object = null, bubbles:Boolean = true, cancelable:Boolean = false)
{
var _loc_6:String = null;
var _loc_5:String = "";
if (params != null)
{
_loc_5 = "params: ";
for (_loc_6 in params)
{
_loc_5 = _loc_5 + (_loc_6 + "=" + params[_loc_6] + " ");
}
}
trace("CustomEvent issued - " + eventName + " " + _loc_5);
super(CONTROL_TYPE, bubbles, cancelable);
this.command = eventName;
if (params != null)
{
this.params = params;
}
return;
}
}
, как вы можете видеть здесь у меня есть статическая функция SetAttribute, которая проходит attrName и Val в массив, а затем отправляет пользовательское событие. по умолчанию в пользовательском событии класса активируются пузырьки. все еще кажется, что, поскольку я не отправлял событие, используя объект, который появляется на сцене, запрещает использование основного приложения flex, чтобы правильно поймать событие.
делает следующий код работы:
<object In Stage>.dispatchEvent(new CustomEvent("testme"));
благодаря
спасибо. Я добавил функцию, которая устанавливает объект отображения, из которого будет происходить событие. – ufk