Просмотр полной версии : Передача параметров в listener
Есть элемент, к которому добавлен listener.
img0.addEventListener(MouseEvent.CLICK,addItem);
Есть, соответственно функция addItem
private function addItem(e:Event):void{
...
}
Мне нужно в эту функцию еще передавать параметр, то есть
private function addItem(e:Event, str:String):void{
...
}
Следовательно, привязка listener должна происходить как-то так:
img0.addEventListener(MouseEvent.CLICK,addItem(event,myString));
Но ActionScript думает по-другому и выдает такое:
"Implicit coercion of a value of type void to an unrelated type function"
Как передать параметр?
Можно написать класс, который будет наследоваться от Event, и в нем передавать нужные параметры.
Ну есть готовый класс DataEvent....
Куда уж проще?
Создать целый лишний класс чтобы один раз передать параметр?
А что, жалко что-ли? Да хоть сотня.
Добавить несколько строк кода всего-лишь. Просто в новом файле и все.
Странные люди…
Как вариант, анонимная функция (специально для ленивцев)
private function creationCompleteHandler (event:FlexEvent):void {
var testString:String = 'walla';
addEventListener (
MouseEvent.MOUSE_MOVE,
function (evt:MouseEvent):void {
moveItem (evt, 'test', testString);
});
}
private function moveItem (evt:MouseEvent, test:String, ... args):void {
trace (test, args);
}
Денис, этож динамика :) Тут некоторые любители продвинутых динамических языков прям молются на клошуры (MethodClosure), а у нас они на халяву с 5 флэша :)
Timerlan
28.04.2007, 00:28
Можно написать класс, который будет наследоваться от Event, и в нем передавать нужные параметры.
а можно пример, как это сделать, если не сложно?
Представление о том, как наследуются классы, имеется?
Timerlan
28.04.2007, 00:32
да, но не могу сообразить что в этом классе написать и непонятно, что должно прийти к функции вместо e:Event. По идее это будет объект события моего созданного класа, т.е. не e:Event, а e:MyClass
package {
import flash.events.Event;
public class MyEvent {
public var anyVariable:Number = null;
public function MyEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false) {
super(type, bubbles, cancelable);
}
}
}
var event:MyEvent = new MyEvent(Event.MOUSE_DOWN);
event.myVariable = 20;
dispatchEvent(event);
Как-то так. Писал спьяну и на коленке, мог и накосячить где…
Timerlan
28.04.2007, 00:57
спасибо
Второй код — просто пример, как диспетчить событие типа MOUSE_DOWN с параметром, не более того.
А зачем тебе передавать параметры в функцию? Если она у тебя содержится в классе она и так имеет доступ ко всем переменным этого класса.
то есть если у нас к примеру есть такой класс:
package {import flash.display.Sprite;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.HTTPStatusEvent;
public class HTTPStatusEventExample extends Sprite {
// объявим переменную в классе
var url:string ="http://www.[yourDomain].com/MissingFile.html"
public function HTTPStatusEventExample() {
var loader:URLLoader = new URLLoader();
loader.addEventListener(HttpStatusEvent.HTTP_STATUS, httpStatusHandler);
var request:URLRequest = new URLRequest(url);
loader.load(request);
}
private function httpStatusHandler(event:HTTPStatusEvent):void {
if (event.status==404) {
// переменная url объявленная в классе доступна и в функциях и в вспомагательных классах
trace("Ошибка: " + event.status);
trace("невозможно соединится с " + url);
} } }}
при запуске он даст следующее, при отсутствии данной странице на сервере:
Ошибка: 404
Невозможно соединится с http://www.[yourDomain].com/MissingFile.html
Речь идет о кастомных событиях и кастомных классах.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.