callback или delegate: техника разработки
Всем привет!
В основном разрабатывал на монстрах вида Ext.js ембер, backbone..., и cейчас активно разрабатываю на чистом js. Возник вопрос в реализации одного и того же кода. function handler(value) { return value * 1000; } function a(value, handler) { handler(value); } $.bind('running', function (value) { return value * 1000; }); ...... function a(value) { Bind.trigger('running', value); } разница - в одного передётся калбек функция, а во втором случае просто подписка. Я не могу прочуять "соль"! Как лучше что и где применять? Спасибо. |
второй вариант лучше как-то так:
var eventRunning= new EventRouter ...... eventRunner.listen( function( value ){ return value * 1000 } ) ...... function a( value ){ eventRunning( value ) } но события имеет смысл применять лишь когда обработчиков может быть произвольное число(0, 1, много) и результат их отработки нам не особо важен. а даже если какой-нибудь из них упадёт с исключением - это его личные трудности и нас они не касаются. коллбэки дают более простую логику работы, так что где не требуются события лучше применять их |
Не понял вопроса, ты не понимаешь где нужно юзать систему событий а где юзать калбаки? и противопоставляешь их?
п.с. не понял, при чем тут "делегирование" |
tenshi, да думаю это единственное различие.
Я не писал делегирование, я написал delegate по аналогии метода jQuey .delegate() Дополнение 1) Да, я не понимаю где их юзать и противопоставляю их, так как они выполняют одинаковую функцию (это на мой взгляд) 2) Я не вижу приимущества в архитектурном плане какой вариант предпочительней. |
Цитата:
|
jQuery.delegate() !!!!!!!!!!!!
офф топ! на вопрос не получил ответа... |
Да я не первый день на js программирую.
Я знаю что такое калбеки и тд. Я привёл вопрос в первом сообщении, можете ещё раз посмотреть. Отличие в 1) после отработки вызовет просто функцию калбек! 2) он вызавет замыкание по имени, никаких калбеков вообще нет (тоесть нет никаких упоминаний), и вот если есть подписи на этот именованое событие уже срабатывают тригеры (туева куча каллбеков хоть вызывается) вопрос опять (снова), с какой точки зрения правильнее разрабатывать приложения на js? Или ещё такой: когда использовать то, а когда то? (примерный ответ дал tenshi) П.С. Без готового фреймворка, так как там всё становится понятнее |
Tenshi,
Только сейчас разглядел, то что ты предложил, никак "не лучше, чем 2", это ближе к калбекам, потому что при $.bind() могут быть вызовы вообще из разных контекстов, а тут eventRunning долже быть в замыкании. Пример: система авторизации, и модуль пользователя |
Цитата:
Цитата:
ну, давайте подумаем, чем отличается функция обратного вызова от системы событий. чем ? да ничем - второе является расширением функциональности первого. в обсерверах (подписчик) есть имена событий, в коллбеках - нет. больше различий не вижу. |
Цитата:
Пример: MySuperApplication.AuthorizationSystem.eventUserLogged.listen( function( user ){ if( prompt( 'Добрый день, не хотите ли отведать этих мягких французских булак, да выпить йаду?' ) ) document.location= '/my/cookies/' }) |
Часовой пояс GMT +3, время: 23:18. |