|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jan 2010
Сообщений: 62
|
Сколько людей уже задавались этим вопросом!
Есть ещё одно решение, оно "как бы" не через задний проход. создать функцию, которая потом будет вызывать нужную уже с параметрами, и вписать её в ивент лисенер. addEventListener(MouseEvent.CLICK, BlablaCaller); function BlablaCaller (e:MouseEvent){ // В скобки вообще можно вставить заглушку Null (обязательно с большой), если передаваемые лисенером данные не нужны. Blabla (Arg, e); // Но е можно и не передавать, это зависит от надобности. } function Blabla (arg, e:MouseEvent){ } Последний раз редактировалось MidnightOne; 11.04.2010 в 14:50. |
|
|||||
Регистрация: Jun 2009
Адрес: Москва
Сообщений: 170
|
Цитата:
|
|
|||||
Регистрация: Jan 2010
Сообщений: 62
|
Цитата:
removeEventListener(MouseEvent.CLICK, BlablaCaller); можно написать где угодно. |
|
|||||
Регистрация: Jun 2009
Адрес: Москва
Сообщений: 170
|
не понимаю... тогда зачем вторая функция? не проще ли вместо
addEventListener(MouseEvent.CLICK, BlablaCaller); function BlablaCaller (e:MouseEvent){ // В скобки вообще можно вставить заглушку Null (обязательно с большой), если передаваемые лисенером данные не нужны. Blabla (Arg, e); // Но е можно и не передавать, это зависит от надобности. } function Blabla (arg, e:MouseEvent){ /*тут описывать что надо делать*/ } addEventListener(MouseEvent.CLICK, Blabla); function Blabla (e:MouseEvent, arg = Arg){ /*тут описывать что надо делать*/ } package { import flash.display.MovieClip; import flash.events.*; public class Main extends MovieClip { private var arg:String="Argument"; public function Main() { super(); stage.addEventListener(MouseEvent.CLICK, blabla); } private function blabla (e:MouseEvent, stringArgument:String = null):void { if (stringArgument == null) stringArgument = arg; trace(arg + " received"); /*тут описывать что надо делать*/ } } } Последний раз редактировалось mickfallout; 11.04.2010 в 17:25. |
|
|||||
Banned
Регистрация: Jun 2009
Сообщений: 298
|
мне когда лениво поднимать кастомный класс я делаю так
private var hash:Dictionary = new Dictionary(); ... var someButt:Sprite = new Sprite(); someButt.graphics.beginFill(0xff0000); someButt.graphics.drawRect(0,0,50,50); someButt.graphics.endFill(); addChild(someButt); var thumbs:InteractiveObject = someButt as InteractiveObject; thumbs.addEventListener(MouseEvent.CLICK,doIt); hash[thumbs] = "argument" private function doIt(event:Event):void { var target:InteractiveObject = event.target as InteractiveObject; trace(hash[target]) // argument; } |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
MidnightOne, mickfallout, автор хочет передать параметр вместе с событием, т.е. сама переменная необязательно должна быть доступна в объекте, в котором вы подписываетесь на это событие. Событие, вообще, может, например, всплывать от какого-то ребенка, который будет передавать значение своей приватной переменной вместе с этим событием. Поэтому ваши способы не являются решением и равносильны тому, чтобы просто создать в классе дополнительное поле для хранения этого параметра.
|
|
|||||
Регистрация: Jun 2009
Адрес: Москва
Сообщений: 170
|
Цитата:
package { import flash.display.MovieClip; import flash.events.*; public class Main extends MovieClip { public function Main() { super(); var localArg:String = "local Argument"; var handler:Function = function(event:Event):void { multiArgumentHandler(event, localArg, handler); }; addEventListener(Event.ENTER_FRAME, handler); } public function multiArgumentHandler(event:Event, argument:String,handler:Function):void { trace("localArgument = "+ argument ); removeEventListener(Event.ENTER_FRAME, handler); } } } Цитата:
|
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Цитата:
Цитата:
|
|
|||||
Регистрация: Jun 2009
Адрес: Москва
Сообщений: 170
|
Цитата:
А вообще такую ситуацию можно представить: package { import flash.display.MovieClip; import flash.events.*; public class Main extends MovieClip { private var counter:int = 0; public function Main() { super(); addEventListener(Event.ENTER_FRAME, enterFrameHadler); sayHelloManyTimes("mickfallout"); sayHelloManyTimes("udaaff"); } private function enterFrameHadler(event:Event):void { counter++; } private function sayHelloManyTimes(name:String):void {//здоровается с заданным человеком каждый кадр до десятого var handler:Function = function(event:Event):void { multiArgumentHandler(event, name, handler); }; addEventListener(Event.ENTER_FRAME, handler); } public function multiArgumentHandler(event:Event, argument:String,handler:Function):void { if (counter > 10) removeEventListener(Event.ENTER_FRAME, handler); trace("Hello, " + argument ); } } } |
|
|||||
Modus ponens
|
Самый сакраментальный вопрос - а зачем? EventDispatcher хочет вызывать слушателя с одним параметром, который сам же и создает - зачем его насиловать? Если вам очень нужно больше параметров - не пользуйтесь EventDispatcher - напишите функцию, которая принимает больше параметров и вызовите ее...
__________________
Hell is the possibility of sanity |
Часовой пояс GMT +4, время: 19:21. |
|
« Предыдущая тема | Следующая тема » |
Теги |
anonimous function , вложенность |
Опции темы | |
Опции просмотра | |
|
|