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

Вернуться   Форум Flasher.ru > Блоги > -De-

Рейтинг: 2.67. Голосов: 3.

как передать параметр в слушатель

Запись от -De- размещена 14.09.2010 в 13:20
Обновил(-а) -De- 14.09.2010 в 15:42

Достаточно быстро накидал, могут быть ошибки/неточности, опечатки, чего-то не хватать, постараюсь дополнить.
Часто бывает просто написать некую функцию paramFunc, которой передается номер кнопки, а не обьект собственно кнопки. Почти всё тут про, "как сопоставить обьекту (event.currentTarget) параметр".
Надо помнить, что addEventListener позволяет повесить сколько угодно слушателей, нижеприведённые методы, почти все - только один (обычно больше одного и не надо, но если забыть - могут быть ошибки). Тут всё скорее про мышиные события, с таймерами и др. могут быть особенности.
1. if/switch
Если кнопок мало и они создаются не динамически, то
Код AS3:
public function listener(event:MouseEvent):void {
  if(event.currentTarget == myBtn1) {
    paramFunc(0);
  }
  else if(event.currentTarget == myBtn2) {
    paramFunc(1);
  }
}
public function listener(event:MouseEvent):void {
  switch(event.currentTarget) {
    case myBtn1:
      paramFunc(0);
      break;
    ...
  }
}
public function listener(event:MouseEvent):void {
  var myBtns:Array = [myBtn1, myBtn2, myBtn3];
  for(var i:int = 0; i < myBtns.length; ++i) {
    if(event.currentTarget == myBtns[i]) {
      paramFunc(i);
      break;
    }
  }
}
2. Dictionary
Достаточно универсальный способ, создание и работа с Dictionary единственное "лишнее" действие. На его основе можно написать даже свой addEventListener, в который передается параметр (может позже осилю).
Это класс, который обрабатывает только MouseEvent.CLICK.
Использовать - вместо obj.addEventListener(MouseEvent.CLICK, listener) писать
ClickClass.addClickListener(obj, listener, param);
Код AS3:
public class ClickClass {
	public static var paramDict:Dictionary = new Dictionary(true);
	public static function addClickListener(obj:InteractiveObject, listener:Function, myParam:*, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = true):void {
	  paramDict[obj] =[listener, myParam];
	  obj.addEventListener(MouseEvent.CLICK, clickHandler, useCapture, priority, useWeakReference);
	}
	public static function myRemoveClickListener(obj:InteractiveObject, useCapture:Boolean = false):Boolean {
	  if(paramDict[obj]) {
		obj.removeEventListener(MouseEvent.CLICK, obj, useCapture);
		delete paramDict[obj];
		return true;
	  }
	  return false;
	}
	public static function clickHandler(event:MouseEvent):void {
	  if(paramDict[event.currentTarget][0]) {
		paramDict[event.currentTarget][0](paramDict[event.currentTarget][1]);
	  }
	}
}
3. class field
Если (почти) все обьекты класса заинтересованы в том, чтоб вызывать слушатель с параметром (напр. кнопки), то стоит сделать у класса новое поле, в котором будет храниться этот самый параметр. Хороший метод, но не всегда классу нужно и логично иметь такое поле. А иногда и собственного класса нет, просто спрайт. Но можно, конечно, сделать свой спрайт, с параметром, как ниже.
Код AS3:
class MyBtn extends Sprite {
  public var btnParam:int;
}
использование
Код AS3:
myBtnButton.btnParam = i;
myBtnButton.addEventListener(MouseEvent.CLICK, clickProxy);
...
public function clickProxy(event:MouseEvent):void {
  paramFunc(event.currentTarget.btnParam);
}
4. anonymous func
Анонимные функции - зло. Жрут память (с их убиранием есть проблемы, в примере), тормозят, если в них свалиться, то не узнать их имени, плохой стиль и многое другое. Пример (не используйте его, тут нельзя удалить эту функцию).
Код AS3:
obj.addEventListener(MouseEvent.CLICK, function listener(ev:MouseEvent):void {paramFunc(i);});
Причем тут если i - переменная цикла, то передастся только последнее значение. Т.к. i в нашей функции именно та самая, что в цикле, и меняется вместе с циклом. Можно сделать отдельную функцию, которая возвращает новосозданную анонимную функцию. В общем, пока смысл этого раздела "не используйте анонимные функции и даже нормального примера не будет".
5. custom event
Создается класс, который расширяет Event и в котором есть параметр. Только флэш не умеет вместо MouseEvent (или другого своего "родного") события использовать ваше, так что придётся в обработчике, созданном одним из вышеуказанных способов потом самому диспатчить событие.
Если вам более привычна событийная модель. Плюс на событие может быть навешено сколько угодно слушателей.
Всего комментариев 64

Комментарии

Старый 14.09.2010 19:24 incoob вне форума
incoob
Цитата:
не используйте его, тут нельзя удалить эту функцию
Что же вы людей обманываете
Вашу проблему можно решить с помощью
Код AS3:
private function onMouseDown(ev:MouseEvent): void
    {
        ev.target.removeEventListener(ev.type, arguments.callee);
    }
Медленно, некрасиво, но работает.
При этом пользоваться этим все так же не стоит.
Обновил(-а) incoob 14.09.2010 в 19:31
Старый 14.09.2010 19:36 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Блуд где то расписывал причины, по которым не стоит пользоваться замыканиями. Если это и решение - то одной из пяти, если не ошибаюсь.
Старый 14.09.2010 19:40 iNils вне форума
iNils
 
Аватар для iNils
Цитата:
Что же вы людей обманываете
Вашу проблему можно решить с помощью
Когда говорят удалить, обычно подразумевают удаление в любой нужный момент, а не сразу же после события (когда удалять то и может не нужно было) которого может и не быть.
Старый 14.09.2010 19:56 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
У меня кстати коллега-москвич есть, которого позвали работать в контору одну московскую. Вся команда писала все обработчики замыканиями и отписывалась как привёл incoob сразу же после него. Собеседовали его такие же люди. Собеседование он провалил, а во время собеседования над ним хихикал коллектив - как же так, не пользуется замыканиями и говорит, что проблема от отписки. )
Старый 14.09.2010 20:02 iNils вне форума
iNils
 
Аватар для iNils
Цитата:
Собеседование он провалил
Я считаю, что ему повезло в этом
Старый 14.09.2010 20:07 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Я тоже ему так сказал )
Старый 14.09.2010 20:23 incoob вне форума
incoob
Не спорю, отписаться можно лишь в момент вызова Полностью решить проблему отписки можно было бы лишь для всяких ENTER_FRAME-ов.
Я, к стати, и не призывал использовать анонимные методы.
Старый 16.09.2010 22:37 -De- вне форума
-De-
 
Аватар для -De-
incoob, да, там надо-бы написать "в данном примере она не удаляется", хотя там "тут" - имеется в виду "если вы скопипастите этот код". Хочу ещё где-то в подпункте 2 раскрыть тему "all inclusive" класса, который сам создает слушателя клику по себе и может вызвать заказанный коллбэк или отдиспатчить евент с параметром. Может, написать таки сравнительно нормальный пример с замыканием. Только по-моему лучше ссылки на анонимные функции где-то хранить, а если хранить, то чем оно лучше способа с Dictionary? Ну или убивать на месте, но это многобукав для не рекомендуемого способа.
Старый 16.09.2010 23:13 Котяра вне форума
Котяра
 
Аватар для Котяра
Нужно использовать только метод №5.
Т.е. при составлении конвенций кодирования для своего проекта я бы написал: для передачи параметра в событии используйте кастомное событие (в крайнем случае DataEvent или схожее), либо берите значение у диспетчера объекта.
Всё остальное костыли.
UPD
2incoob анонимных методов не бывает - это очень существенное противоречие. Метод ВСЕГДА принадлежит какому нибудь объекту (даже если это статичный метод - тогда он принадлежит глобальному классу). Анонимная функция АНОНИМНА - это не метод, это скорее, локальная переменная.
Обновил(-а) Котяра 16.09.2010 в 23:21
Старый 17.09.2010 09:24 -De- вне форума
-De-
 
Аватар для -De-
Дык нельзя использовать только метод №5, вот в чем его минус)
Старый 17.09.2010 13:25 iNils вне форума
iNils
 
Аватар для iNils
Цитата:
Дык нельзя использовать только метод №5, вот в чем его минус)
- Мерседес лучше чем БМВ.
- Чем лучше?
- Чем БМВ.
Старый 17.09.2010 14:26 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Второй и третий тоже ниче так.
Старый 19.09.2010 02:36 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Использую только #3 и #5. IMO остальное не нужно и вряд ли будет нужно при любом раскладе.
Старый 19.09.2010 14:02 Котяра вне форума
Котяра
 
Аватар для Котяра
да, насчёт " только 5" погорячился, 3 тоже годится - я писал что "либо берите значение у диспетчера объекта." Просто очень завуалированно было)
Назовите не class field а currentTarget property
Старый 19.09.2010 16:04 BlooDHounD вне форума
BlooDHounD
 
Аватар для BlooDHounD
а я в зависимости от случая любым из этих. так как каждый метод имеет право на жизнь в определённых условиях. жаль что почти никто из местных этих условий не понимает. хоть я уже их описывал ( условия ). видимо сложно для восприятия.
Старый 19.09.2010 17:02 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Блуд, я помню ты говорил что и замыкание есть места где можно использовать.
Приведи примеры, где оно хорошо впишется. Мне на ум приходит разве что место где программа оканчивает работу на совсем с ошибкой: типа там уже без разницы, что и как - но и то идея не очень.
Старый 19.09.2010 19:08 Котяра вне форума
Котяра
 
Аватар для Котяра
любой костыль имеет право на жизнь, но костылём он от этого не перестаёт быть.
Старый 19.09.2010 21:24 i.o. вне форума
i.o.
 
Аватар для i.o.
Цитата:
что и замыкание есть места где можно использовать.
Приведи примеры, где оно хорошо впишется
Ну вот есть примерчик (пост номер 3) - http://www.flashdevelop.org/communit...php?f=5&t=7283
Действительно для подобного было бы гиморно создавть отдельные функции ))
Старый 19.09.2010 22:27 BlooDHounD вне форума
BlooDHounD
 
Аватар для BlooDHounD
1. ниачём вообще
2. самый юзабельный. используется для хранения параметров внутри класса.
на каждый пшик новое свойство не сделать. делать класс динамическим или делать "супер-свойство" - дурной тон. к тому же, этот подход нужен не только для событий.
3. это ваще не передача параметров. создавать свойство у объекта, которое ему не нужно - бессмысленно. у объекта должны быть свойство, только необходимые ему самому. если свойство объекту не нужно, то см. п. 2.
4. пример, написал на коленке:
Код AS3:
package {
 
	import flash.events.Event;
 
	public function nextframeCall(func:Function, args:Array=null, priority:int=0.0):void {
		dispatcher.addEventListener( Event.ENTER_FRAME, function(event:Event):void {
			func.apply( null, args );
		}, false, priority );
	}
 
}
 
import flash.display.Shape;
 
internal const dispatcher:Shape = new Shape();
5. вообще крайне редки случай. через событие нужно протаскивать только значений, которые нигде не записываются. например в MouseEvent почти все значения и так присутствуют в target. через событие они протаскиваются видимо только из-за совместимости с ecma. ну или ещё зачем-то. в общем я не знаю. но вот значения altKey, delta и т.д. по другому не получить. поэтому они действительно нужны в событие.
Старый 19.09.2010 23:07 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
2Blood: интересно, но непонятно ) Почему нельзя написать менеджер, ловящий ENTER_FRAME и вызывающий столько методов со столькими аргументами сколько нужно? Не вижу тут того, в чем замыкание "реально" оправдывает себя: по мне тут экономия времени разработки с 15 минут до 30 секунд, но в релиз версии проекта я бы себе такое не позволил )

И да, почему константа написана мелкими буквами? Конвенция на константы не распространяется на сложные типы в силу "нечестных констант"?
Обновил(-а) Psycho Tiger 19.09.2010 в 23:11
Старый 19.09.2010 23:09 i.o. вне форума
i.o.
 
Аватар для i.o.
Цитата:
Зачем вообще такое может понадобится?
Подобное зовется "делегированием" )
Старый 19.09.2010 23:12 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Я не так выразился, пост поправил уже)
Я хотел сказать "Зачем такое может понадобится в таком исполнении" )
Старый 19.09.2010 23:49 Котяра вне форума
Котяра
 
Аватар для Котяра
Пост хорош. Но ещё раз скажу про рентабельность использования:
В своём code-convention я использую только 5 и 3. Всё. Нужно ограничивать. А то развелось тут всяких динамщиков) Стремимся к C++!
Типа - назад в будуще!
Старый 19.09.2010 23:51 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
@BlooDHounD
Цитата:
3. это ваще не передача параметров. создавать свойство у объекта, которое ему не нужно - бессмысленно. у объекта должны быть свойство, только необходимые ему самому.
Позволю себе не согласиться. Событие сигнализирует об изменении свойства => геттер этого свойства вполне имеет право на жизнь
Старый 20.09.2010 00:18 BlooDHounD вне форума
BlooDHounD
 
Аватар для BlooDHounD
@Psycho Tiger, ну напишите манагер, кто мешает? я пример писал прямо в посте, даже отписаться забыл от события =)

@gloomyBrain, Вы вообще поняли, что написали? какое отношение Ваш текст имеет к цитате?
Старый 20.09.2010 00:20 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Я не о том. )
Это и есть место, в котором замыкание оправдано?
Старый 20.09.2010 01:07 BlooDHounD вне форума
BlooDHounD
 
Аватар для BlooDHounD
Psycho Tiger, ну я его даже в этом случаи не использую. но вообще да.
Старый 20.09.2010 01:17 Котяра вне форума
Котяра
 
Аватар для Котяра
Друзья. Не забывайте зачем пишется код. Главное не чистота кода. Главное - продукт.
Если рентабельнее *****кодить - говонокодьте.
Старый 20.09.2010 23:17 expl вне форума
expl
Мы 3+5 используем, вместе, не по-отдельности, чтобы типы поменьше приводить
Ибо не знаю как с тестами, но без них если что рефакторить - то типизация должна быть по-сильнее.
Старый 21.09.2010 00:02 dimarik вне форума
dimarik
 
Аватар для dimarik
1 (редко) + не, не пять.

Я диспатчу обычные эвенты, которых полно во флешплеере, описываю их в ASDoc к классу - эмиттеру, а из класса-ресипиента, так как он наслышан о таргете, дергаю нужные геттеры.

Но на самом деле тут разница (баланс) между POP и PUSH системой. Т.е. либо Вы передаете все в объекте события (a = event.iHasOneBillion), либо ресипиент тянет из объекта по событийной ссылке (a = event.target.gimmeOneBillion() ).
Обновил(-а) dimarik 21.09.2010 в 00:12
Старый 22.09.2010 01:23 expl вне форума
expl
Цитата:
Друзья. Не забывайте зачем пишется код. Главное не чистота кода. Главное - продукт.
Если рентабельнее *****кодить - говонокодьте.
Обычно после появления ифов 7-кратной вложенности лепить дальше затычки становится очень трудно. Перед тем как продолжить приходится рефакторить
А так, да - если низкий уровень абстракции справляется - то более высокий только проблем добавит. Но это разумный принцип разработки


Цитата:
Psycho Tiger:

Блуд, я помню ты говорил что и замыкание есть места где можно использовать.
Приведи примеры, где оно хорошо впишется. Мне на ум приходит разве что место где программа оканчивает работу на совсем с ошибкой: типа там уже без разницы, что и как - но и то идея не очень.
По идее, такой способ не должен стать источником проблем с памятью и производительностью (с отпиской будет сложнее):
Код AS3:
public static function generateCallback(origin:Function, parameter:int):Function
{
    return function(event:Event):void
    {
         origin(parameter, event);
    }
}
 
 
addEventListener(MouseEvent.CLICK, generateCallback(onClick, 1));
 
private function onClick(parameter:int, event:Event):void
{
     // делаем что нужно
}
Статичный контекст не должен захватиться анонимной функцией, а если и захватиться - он и без нее в памяти постоянно торчит,
замедления работы с переменными тоже нет - она одна всего.
Но такие фишки для haXe ещё как-то применимы - там все это дело типизировано - в as3 это только код запутывает
Обновил(-а) expl 06.10.2010 в 00:44
Старый 22.09.2010 14:01 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Ок, а как отпишетесь?
И откуда ифы 7-кратной вложенности вообще могут взяться?
Старый 22.09.2010 22:49 expl вне форума
expl
Цитата:
Ок, а как отпишетесь?
Да никак не отпишусь, не пользуюсь, для примера привел, хотя в качестве генератора одноразовых автоматически отписывающихся колбеков пару раз использовал.
Цитата:
И откуда ифы 7-кратной вложенности вообще могут взяться?
Появлаются, гады, - из неоткуда.
Но если не они, так дублирование кода без рефакторинга будет появлятся, и после правки очередного бага в 10 местах наступит "да пошло оно лесом, не убьет за рефакторинг меня никто", т.е. *****кодить дальше опять не получится
Обновил(-а) expl 22.09.2010 в 22:52
Старый 23.09.2010 18:08 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Тройная вложенность ифов у меня - крайняя редкость. Двойная - не часто. Я просто не понимаю, как можно добиться семикратной.
Старый 24.09.2010 01:58 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
Я просто не понимаю, как можно добиться семикратной.
Ну, один раз делал на 5 уровней вложенности. Но только в целях ускорения алгоритма. А еще там были первые continue для циклов в моей жизни =)
Старый 24.09.2010 10:52 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
5 кратная вложенность ифов с циклами - поверю. Речь шла конкретна об ифах.

Вроде в сортировке шелла 4-х кратная, кстати. Но это тоже с циклами.
Старый 24.09.2010 13:12 Котяра вне форума
Котяра
 
Аватар для Котяра
7 просто красивое число)
можно было написать over 9000 уровней вложенности)
Старый 24.09.2010 22:13 expl вне форума
expl
Можете не верить, но в нашей боевой версии я видел вложенность ифов и больше 7
Пример, правда тут алгоритм, а не логика, локика отрефакторена уже к сожалению:
Код AS3:
            while ((!found) && (!noWay))
            {
                ...
                outerLoop: for each(x in xs)
                {
                    ...
                    for (yString in newMaskX)
                    {
                        ...
                    }
                    for each(y in ys)
                    {
                        if (newMaskX[y] == wayLength - 1)
                        {
                            for (i = 0; i < 4; i++) // перебор по соседям заполненных в поисках пустой 
                            {
                                ...
                                if ((shiftedX == startX) && (shiftedY == startY)) 
                                {
                                    ...
                                }
 
                                if (getValue(shiftedX, shiftedY) == MaskCell.ROAD)
                                {
                                    ...
                                    if (newLine == null || newLine[shiftedY] == null)
                                    {
                                        ...
                                        if (newLine == null)
                                        {
                                            newLine = [];
                                            newMask[shiftedX] = newLine;
                                        }
                                        newLine[shiftedY] = wayLength;
                                    }
                                }
                                if (noWay == true)
                                {
                                    ...
                                }
                            }
                        }
                    }
                }
            }
Обновил(-а) expl 24.09.2010 в 22:38
Старый 24.09.2010 22:51 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Круто ))
Не знаю насчет рефакторинга кода, может быть можно было сделать всё меньшим количеством ифов.
Не подумай, я не говорю что это "по-нубски" или как то ещё. Просто в моей практике не встречалось.
Старый 24.09.2010 23:12 Котяра вне форума
Котяра
 
Аватар для Котяра
часто такие контрукции получаются в результате "антирефакторинга" (вернее, всё же, рефакторинга в целях повышения производительности, но снижающего читабельность/реюзабельность), да и то очень постараться надо.
в коде выше как минимум можно было сократить в
Цитата:
if (newLine == null || newLine[shiftedY] == null)
{
...
if (newLine == null)
но вообще такое рефакторится на раз.
типа обрубаем циклы
Цитата:
for each(y in ys)
{
doSmthWith(y);
}
используем стратегии и т.п.
вот: пример из моей практики (там as2, но и уровней больше (штук по 9 -12 встречается)
Обновил(-а) Котяра 24.09.2010 в 23:37
Старый 24.09.2010 23:41 expl вне форума
expl
Цитата:
Не знаю насчет рефакторинга кода, может быть можно было сделать всё меньшим количеством ифов.
Цитата:
часто такие контрукции получаются в результате "антирефакторинга"
Да пример не особо удачен, все правильно, этот код не был отрефакторен по 2-м причинам:
- он изолирован от всего остального и не правится уже несколько недель - нет "сложности вноса правок", потому что правок нет
- код критичен к производительности - рефакторинг негативно на ней скажется

Цитата:
используем стратегии и т.п.
вот: пример из моей практики (там as2, но и уровней больше (штук по 9 -12 встречается)
Да, стратегии/состояния я тоже использую, когда логика выбивается в такие свичи (обычно встречается когда нужно сменять инструменты, допустим рисования в редакторе или действий над объектами в игре), это происходит, когда дальше поддерживать эти веточки условной логики становиться жутко тяжело,
Ну, блин, про это и речь - появляются ветки ифов - боремся с получившимися макаронами - низкокачественного кода не остается. Выовод - писать низкокачественный код не дешево! Что и требовалось доказать

Иное дело, когда сразу пытаешься налепить абстракций и потом втиснуть в них новые правки - получается еще хуже, но это другая история
Обновил(-а) expl 06.10.2010 в 00:41
Старый 25.09.2010 21:53 f.g.programmer вне форума
f.g.programmer
 
Аватар для f.g.programmer
Насчет снижения производительности при рефакторинге в данном случае думаю это просто отговорки.
Применение граничных операторов, типа
Код AS3:
if(...) continue;
if(...) break;
if(...) return;
скорее улучшат производительность. Да и выделение одного-двух методов пожалуй не будет критичным.

Хотя я в общем-то согласен, что иногда лучше не пытаться сделать что-то, что кажется нам лучше, если это и так неплохо работает. Я и сам обычно рефакторю чужой код, только когда требуется внести значительные изменения, или не могу понять как он работает.
Старый 26.09.2010 22:20 BlooDHounD вне форума
BlooDHounD
 
Аватар для BlooDHounD
@f.g.programmer
появление дополнительных оператор вряд ли может положительно сказаться на производительности.
Старый 07.10.2010 00:59 dimarik вне форума
dimarik
 
Аватар для dimarik
Цитата:
Сообщение от expl
Иное дело, когда сразу пытаешься налепить абстракций и потом втиснуть в них новые правки - получается еще хуже, но это другая история
Абстракция хороша идеальной. Это понятно. Если Вы часто правите абстракцию, то скорее всего, рассчитали ее как частность.
Старый 22.07.2011 22:00 Azo вне форума
Azo
 
Аватар для Azo
А я всегда передаю параметр так:

Вешаю на например на кнопки в цикле .name="b"+i;

И в функции достаю его e.currentTarget.name.substr(1,e.currentTarget.name.length-1);
Старый 22.07.2011 22:32 КорДум вне форума
КорДум
 
Аватар для КорДум
Ужас какой. А есть еще DataEvent.
Старый 23.07.2011 01:03 Котяра вне форума
Котяра
 
Аватар для Котяра
Код AS3:
(e.currentTarget as IMyButton).id
Старый 23.07.2011 13:11 carrotoff вне форума
carrotoff
 
Аватар для carrotoff
Цитата:
Сообщение от Azo
А я всегда передаю параметр так:

Вешаю на например на кнопки в цикле .name="b"+i;

И в функции достаю его e.currentTarget.name.substr(1,e.currentTarget.name.length-1)
Акститесь, это же АДЪ!
Старый 30.09.2011 22:30 SchatteN вне форума
SchatteN
Извините, если не своевременно и не разбираюсь в теме, да и вообще бред напишу, но почему в "4. anonymous func" не использовать код подобного типа:
Код AS3:
obj.addEventListener(MouseEvent.CLICK, function listener(ev:MouseEvent):void {obj.removeEventListener(MouseEvent.CLICK,listener); paramFunc(i);});
Старый 01.10.2011 00:40 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
А теперь так же, но вне тела listener
 

 


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


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