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

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

Оценить эту запись

target и currentTarget

Запись от Котяра размещена 09.12.2012 в 02:25

Мы просто все привыкли, хотя по-началу я никак понять не мог смысла:
"Целью события является тот кто его послал. Текущей целью события является объект у которого мы попросили указывать о событии"

бред наркоманов

target = sender,creator или dispatcher
currentTarget = correspondent, notifier или ещё кто типа responder,
но никак не этот бред.
Я понимаю, что таргет для мыши понятен - это типа объект на который, таки словилась мышь.. но для юзерских событий это вообще ни о чём.
Sender был ещё в далеком делфи http://www.delphi-manual.ru/sender.php
В шарпе он тоже sender.

ЗЫ. Просто вылилось в процессе чат-общения)
Давайте в коментах ещё примерчики "странностей"
типа
addEventListener(Event.COMPLETE..
по рекомендации адобы completeHandler

почему не
Код AS3:
addEventListener(Event.COMPLETE, completeListener)
и не
Код AS3:
addEventHandler(Event.COMPLETE, completeHandler)
похоливарим?
Всего комментариев 43

Комментарии

Старый 09.12.2012 02:29 Zebestov вне форума
Zebestov
 
Аватар для Zebestov
Все логично, handler — обработчик.
Мы добавили слушателя, который вызывает обработчик события есличо.
Старый 09.12.2012 02:57 Котяра вне форума
Котяра
 
Аватар для Котяра
Вадим, в том то и дело, что мы добавляем всего-навсего обработчик. Т.е. именно с точки зрения красивой
абстракции.
добавитьОбработчикСобытия(событие, обработчик)
всё.

Кто такой слушатель?
Нафига его добавлять?

Ладно, если принять handler === listener, то
тогда пофик, но тогда давайте
Код AS3:
addEventListener(Event.COMPLETE, completeListener)
А если это разные понятия, объясните мне, где и кто в такой конструкции
слушатель?
Код AS3:
addEventListener(Event.COMPLETE, completeHandler)
Старый 09.12.2012 03:07 Zebestov вне форума
Zebestov
 
Аватар для Zebestov
Цитата:
Кто такой слушатель?
Он висит на мачте и орет "ЗЕМЛЯ!!!", тем самым вызывая капитана, который обрабатывает эту счастливую истерику и рулит дальше, сообразно обстоятельствам. Посадить на мачту капитана — не комильфо! Дать рулить матросу — упаси Посейдон!
Так и живем...
Старый 09.12.2012 03:13 Котяра вне форума
Котяра
 
Аватар для Котяра
Цитата:
Все логично, handler — обработчик.
Мы добавили слушателя, который вызывает обработчик события есличо.
addEventListenerWhoCalledHandler
Где в параметрах метода listener?

Адобы просто неопределились как называть listener или handler
решили, что handler таки лучше и записали в рекомендации,
а метод уже в плеере давно)
Старый 09.12.2012 03:16 Zebestov вне форума
Zebestov
 
Аватар для Zebestov
Цитата:
Где в параметрах метода listener?
Он в названии метода.
Старый 09.12.2012 04:33 BlooDHounD вне форума
BlooDHounD
 
Аватар для BlooDHounD
с разных сторон - разные название. это сложно для русского человека, а для забугорья всё логично.
вот пример, который возможно тебе поможет понять:

параметры - передаются, а аргументы принимаются. с точки зрения ВМ, это одно и тоже. но с точки зрения проектировщика и разработчика это разные вещи. собственно listener и handler - равно из той же оперы.

arguments - находятся внутри метода.
parameters - находятся снаружи.
Старый 09.12.2012 05:26 Котяра вне форума
Котяра
 
Аватар для Котяра
А target из той же оперы? почему же в шарпе и дельфи логичный sender?
Они из незабугорья?
Старый 09.12.2012 06:51 Котяра вне форума
Котяра
 
Аватар для Котяра
Цитата:
параметры - передаются, а аргументы принимаются
Где ты такую бредятину услышал?
В смысле, что это разные вещи?
Просто параметры - это более общее понятие, чем конкретное - аргументы.
Старый 09.12.2012 12:14 alatar вне форума
alatar
 
Аватар для alatar
Цитата:
А target из той же оперы?
target связан с фазами событий.
Цитата:
В смысле, что это разные вещи?
Для простых типов вполне разные.
Старый 09.12.2012 12:53 i.o. вне форума
i.o.
 
Аватар для i.o.
currentTarget логичнее было бы обозвать каким-нибудь listeningDispatcher
Старый 09.12.2012 13:02 Simplifier вне форума
Simplifier
В общем-то слушатель и обработчик - одно и то же, но при желании можно выявить различия употребления.

Цитата:
In order to handle (respond to) events in an ActionScript program, we use event listeners.
В целом, мы сначала дожидаемся (слушаем) события, а затем его обрабатываем. То есть, когда мы пишем addEventListener, удобно представлять, что событие еще не произошло и его необходимо слушать. А когда мы реализуем саму функцию, то работаем с событием как со свершившимся фактом.
Старый 09.12.2012 14:04 Simplifier вне форума
Simplifier
Цитата:
Где ты такую бредятину услышал?
В смысле, что это разные вещи?
На википедию, например, можно заглянуть
Старый 09.12.2012 17:59 silin вне форума
silin
 
Аватар для silin
имхо этот бардак из AS2 приполз, точнее из того еще набора компонентов и того же EventDispatcher'а
в его addEventListener можно было передать и объект, несущий одноименный событию метод (ну типа регистрируем слушатель, который потом событие обработает), а можно и сам метод, который в этом случае почему-то тоже обзывался слушателем..
Код AS3:
listeningObject = { };
listeningObject.click = function(event)
{
	trace( "listeningObject : " + this );
    trace(event.target.label + " clicked");
}
 
function clickHandler(event)
{
	trace( "listeningObject : " + this );
    trace(event.target.label + " clicked");
}
 
 
button.addEventListener("click", listeningObject);
button.addEventListener("click", clickHandler);
 
 
//listeningObject : _level0.button
//Button clicked
//listeningObject : [object Object]
//Button clicked
для нынешнего EventDispatcher, видимо, решили сохранить терминологию, вот бред и выходит
Старый 09.12.2012 20:30 alatar вне форума
alatar
 
Аватар для alatar
Ну, вполне возможно, в AS4 будет шанс написать свой диспатчер и назвать методы как душе угодно.
Старый 09.12.2012 20:34 СлаваRa вне форума
СлаваRa
 
Аватар для СлаваRa
в АS4, скорее всего, придется писать свой диспатчер, если будет нужна событийная модель.
Старый 10.12.2012 00:23 alatar вне форума
alatar
 
Аватар для alatar
Спасибо за перевод. :-)
Старый 10.12.2012 09:06 FlashRus вне форума
FlashRus
 
Аватар для FlashRus
По мне так всё логично. Добавляем слушателя (listener). Слушатель состоит из обработчика (handler) и типа события. На момент добавления слушателя событие ещё не произошло, собственно поэтому и называется listener, а когда производится обработка вызывается handler. В чем проблема? Или я не понимаю сути холивара?
Обновил(-а) FlashRus 10.12.2012 в 11:02
Старый 10.12.2012 12:33 alatar вне форума
alatar
 
Аватар для alatar
Было бы логично, если бы второй параметр в addEventListener назывался бы handler.
Старый 10.12.2012 13:09 FlashRus вне форума
FlashRus
 
Аватар для FlashRus
О....блин... действительно. Разрыв шаблонов. Чёт я даже внимания на подсказку не обращал.
Старый 10.12.2012 13:28 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Ну вообще из названия
add - добавить
event - событие
listener - слушатель

То есть метод то на самом деле "добавить". Вот к такому событию. Вот такого слушателя.

Я никогда не отделял понятия "слушатель" и "обработчик". На мой взгляд очевидна их идентичность, ибо зачем нужно слушать, если не обрабатывать. А то что Adobe обозначает двумя словами одно и тоже - нет, ну у них есть и другие проблемы =) и не только с документацией.

И те же проблемы с документацией есть и в описании event.target. Ну перевели неудобочитаемо. Ну и что. Все равно ведь верно в понятиях документации. Понятия, правда, тоже перевели дословно и нечитаемо.

Ну так там же можно проявить себя, к каждой доке можно дать свой комментарий.
Старый 10.12.2012 13:59 Котяра вне форума
Котяра
 
Аватар для Котяра
Цитата:
В смысле, что это разные вещи?
Просто параметры - это более общее понятие, чем конкретное - аргументы.
Тут был неправ - каюсь.
Вернее неправильно выразился - параметры это сущности, которыми параметризуется функция, аргументы - значения.
Но всё же это не
Цитата:
arguments - находятся внутри метода.
parameters - находятся снаружи.
т.е.
Код AS3:
function foo(a:int,b:int = 1)
foo(1);
будет иметь 1 аргумент, но всегда 2 параметра.
Старый 10.12.2012 17:05 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
И не так и не так, блин!
Параметры это специфицакция типа функции. Т.е. функция параметризирована кортежем из каких-то типов. Т.е. параметры (часто в сочетании "формальные параметры функции") это кортеж типов по которому будет определятся соответствие попытки вызвать функцию и возможности вызвать эту функцию.
Аргументы, это сами значения, которые были переданы в функцию. В некоторых языках, типа Хаскелла, эти вещи даже в разных местах описываются.
Просто часто одно используется вместо другого, особенно потому, что во многих языках никаких дополнительных ярлыков параметрам не присваивают, а говорить о Н-ном параметре функции неудобно, проще называть его тем же именем, что и аргумент.
Старый 11.12.2012 00:06 GBee вне форума
GBee
 
Аватар для GBee
Никогда не думал об этом, но по мне так Котяра прав. Слушатель - объект, у которого вызывают addEventListener, а обработчик какой-либо метод. Поэтому логичнее назвать addEventHandler.
Старый 11.12.2012 08:53 FlashRus вне форума
FlashRus
 
Аватар для FlashRus
Цитата:
Поэтому логичнее назвать addEventHandler.
- мы то добавляем не только handler. Мы указываем также и тип события, что в совокупности, как мне кажется можно назвать listener'ом.
Старый 11.12.2012 10:10 КорДум вне форума
КорДум
 
Аватар для КорДум
FlashRus, нет, мы добавляем в лист с ключом строки события handler — и это нельзя никак назвать listener. Вот если бы третьим (или вместо второго) параметром (пардон, аргументом?) шла ссылка на объект, содержащий этот handler, вот тогда бы да. А так — это обычное добавление функции-handler.

Вот например в Java как раз сочиняют свои кастомные addEventListener. И в аргументы передают на самом деле listener — ссылка на экземпляр класса, имплементящий какой-то интерфейс с handlers. В качестве примера можно глянуть компоненты Swing (вместо "Event" используется название события):
Код:
public void addActionListener(ActionListener l)
Где ActionListener — как раз тот самый интерфейс.
Старый 11.12.2012 10:28 FlashRus вне форума
FlashRus
 
Аватар для FlashRus
Посмотрел сейчас EventDispathcer в тамарине и действительно... ни о каком листнере речи быть не может.
А я наивный пологал, что есть какой нибудь internal класс аля Listener который создаётся в методе addEventListener.
Удивила кстати одна конструкция. Взгляните на строку с var obj=this и if (obj==null) obj=this. В чём смысл???
Код AS3:
public function addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false):void {
            var obj=this; //Кладём this в obj
            if (_listeners[type]==undefined)
                _listeners[type]=new Array();
            _listeners[type].push(listener);
            var fnd=-1;
            for (var i=0;i<_listenersNames.length;i++) {
                if (type==_listenersNames[i]) { fnd=i; break; }
            }
            if (fnd==-1) {
                _listenersNames.push(type);
                _listenersCalls[type]=0;
            }
            if (obj==null) obj=this; //ЧТО ЗА??????? Было же var obj=this;
            var fnd=-1;
            for (var i=0;i<_objectlist.length;i++) {
                if (_objectmap[i]==obj) {
                   fnd=i;
                   break;
                }
            }
            if (fnd==-1) {
                _objectlist.push(""+obj);
                _objectmap.push(obj);
            }
        }
Кстати, чуваки явно не знакомы с while'ом:
Код AS3:
            for (var i=0;i<_objectlist.length;i++) {
                if (_objectmap[i]==obj) {
                   fnd=i;
                   break;
                }
            }
Хотя, каждому своё.
Старый 11.12.2012 12:28 КорДум вне форума
КорДум
 
Аватар для КорДум
Забавно. Кажется, сие вопиющая индусятина.
Старый 11.12.2012 12:56 i.o. вне форума
i.o.
 
Аватар для i.o.
Цитата:
Посмотрел сейчас EventDispathcer в тамарине и действительно...
Тамарин и адобовский flash.events.* вещи ведь разные, по-моему.
Старый 11.12.2012 15:02 etc вне форума
etc
 
Аватар для etc
Я чето не понял, чем это while лучше.
Старый 11.12.2012 15:13 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
FlashRus очень хочется верить, что это какая-то импровизация на тему, а не настоящий код... Может это в каких-то стратегических целях было написано, типа, чтобы какой-нибудь утилите типа lint угодить, или что-то такое :| Хотя, код в Тамарине совсем не торт, есть такое дело...
Старый 11.12.2012 15:16 GBee вне форума
GBee
 
Аватар для GBee
А зачем this вообще запоминать? :о)) И где типы?
Старый 11.12.2012 15:17 i.o. вне форума
i.o.
 
Аватар для i.o.
Тамариновский код диспатчера не может быть тем, который в плеере потому, что в плеере весь диспатчер нативный, иначе любым декомпилятором можно было бы оценить внутренности диспатчера из playerglobals.swc.
А этот (тамариновский) написан на чистом AS3. Так что тут нестыковочка.
Старый 11.12.2012 16:02 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
Не, это совсем не обязательно. Код и в плеере может быть написан на AS3, этому ничто не мешает. Т.е. ну будет он просто внедрен в плеер, а не загружаться с каждой SWF - ничего такого. Тут просто какой-то очень станный код, непонятно вообще, зачем так делать, да и он не соответствует описанию функции (игнорирует половину аргументов вообще).
Старый 11.12.2012 16:03 Hauts вне форума
Hauts
 
Аватар для Hauts
Код AS3:
_objectlist.push(""+obj);
Забавно, как в яваскрипте быстрое приведение к строке.
Старый 11.12.2012 16:11 FlashRus вне форума
FlashRus
 
Аватар для FlashRus
wvxvw т.е. возможно, всё совсем печально?
Если такой ужас в FP сидит, то я даже не представляю кто его пишет.
Старый 11.12.2012 17:06 КорДум вне форума
КорДум
 
Аватар для КорДум
Причем здесь FP, если речь о Тамарине?
Старый 11.12.2012 19:01 elder_Nosferatu вне форума
elder_Nosferatu
 
Аватар для elder_Nosferatu
Цитата:
Сообщение от GBee
... Слушатель - объект, у которого вызывают addEventListener, а обработчик какой-либо метод...
Никогда особо над этим сильно не задумывался, но мне всегда казалось, что инстанс, у которого вызывают addEventListener - вещатель, слушатель - это тот, кто заинтересован в этом событии и предоставляет свой обработчик. Слушатель - вообще по моему нечто условное, так как он может быть объектом (обработчик - метод), классом (обработчик - статический метод) или может вообще не существовать (обработчик - функция пакета).
Старый 11.12.2012 19:36 GBee вне форума
GBee
 
Аватар для GBee
Цитата:
Никогда особо над этим сильно не задумывался, но мне всегда казалось, что инстанс, у которого вызывают addEventListener - вещатель
Кстати, тоже логично. :о)) Вот только, если бы не баблинг...
Старый 11.12.2012 20:00 alatar вне форума
alatar
 
Аватар для alatar
А что не так с баблингом? Сообщение передается по цепочке и в конце-концов его будет вещать тот у которого вы подписались на это событие.
Старый 11.12.2012 20:16 GBee вне форума
GBee
 
Аватар для GBee
Цитата:
А что не так с баблингом? Сообщение передается по цепочке и в конце-концов его будет вещать тот у которого вы подписались на это событие.
Это же интернет, я не могу быть не прав :о)

Да согласен. Был не прав насчет слушателя и баблинга. Вещатель вешает на себя обработчики. Но это все равно обработчики. То есть addEventHandler логичнее.
Старый 11.12.2012 21:49 elder_Nosferatu вне форума
elder_Nosferatu
 
Аватар для elder_Nosferatu
Если уже придираться, тогда меня больше смущает название второго формального параметра метода addEventListener - listener. А само название метода вполне терпимое. Так как для работы EventDispatcher`а сам слушатель вообще не играет роли (как я уже писал его фактически может и не быть), то и нет смысла его запоминать, принимается только нужная информация:
- тип интересующего события;
- куда доставить/кому вручить новость (обработчик);
- прочая уточняющая информация.

Для определения очередного слушателя (addEventListener) этих данных достаточно, а для определения обработчика (addEventHandler) чтото многовато...

Конечно, вряд ли парни из Adobe так же это все воспринимают, но для меня так все стоит на своих местах и кажется вполне логичным. Следовательно я и не особо заморачиваюсь по этому поводу.
Старый 12.12.2012 01:31 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
Цитата:
Если такой ужас в FP сидит, то я даже не представляю кто его пишет.
Да не, это что-то совсем не из той оперы. Либо грубая подделка либо для каких-то других вещей сделана.
Старый 18.01.2013 23:57 BlooDHounD вне форума
BlooDHounD
 
Аватар для BlooDHounD
я всего-лишь написал "для дураков", без лишних терминов и заморочек =) что бы любому идиоту было понятно.
 

 


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


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