18.10.2012, 14:02
|
Новичок на форуме
|
|
Регистрация: 18.10.2012
Сообщений: 6
|
|
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);
}
разница - в одного передётся калбек функция, а во втором случае просто подписка.
Я не могу прочуять "соль"!
Как лучше что и где применять?
Спасибо.
|
|
18.10.2012, 19:53
|
Профессор
|
|
Регистрация: 20.03.2008
Сообщений: 1,183
|
|
второй вариант лучше как-то так:
var eventRunning= new EventRouter
......
eventRunner.listen( function( value ){
return value * 1000
} )
......
function a( value ){
eventRunning( value )
}
но события имеет смысл применять лишь когда обработчиков может быть произвольное число(0, 1, много) и результат их отработки нам не особо важен. а даже если какой-нибудь из них упадёт с исключением - это его личные трудности и нас они не касаются.
коллбэки дают более простую логику работы, так что где не требуются события лучше применять их
__________________
.ня
|
|
18.10.2012, 21:06
|
|
Профессор
|
|
Регистрация: 10.12.2011
Сообщений: 290
|
|
Не понял вопроса, ты не понимаешь где нужно юзать систему событий а где юзать калбаки? и противопоставляешь их?
п.с. не понял, при чем тут "делегирование"
|
|
19.10.2012, 10:37
|
Новичок на форуме
|
|
Регистрация: 18.10.2012
Сообщений: 6
|
|
tenshi, да думаю это единственное различие.
Я не писал делегирование, я написал delegate по аналогии метода jQuey .delegate()
Дополнение
1) Да, я не понимаю где их юзать и противопоставляю их, так как они выполняют одинаковую функцию (это на мой взгляд)
2) Я не вижу приимущества в архитектурном плане какой вариант предпочительней.
|
|
20.10.2012, 10:23
|
|
Профессор
|
|
Регистрация: 10.12.2011
Сообщений: 290
|
|
Сообщение от zoh
|
Я не писал делегирование
|
делегейт это делегировать! и не кто не говорит что ты писал "делегирование" !
__________________
Последний раз редактировалось Livanderiaamarum, 20.10.2012 в 10:26.
|
|
22.10.2012, 09:35
|
Новичок на форуме
|
|
Регистрация: 18.10.2012
Сообщений: 6
|
|
jQuery.delegate() !!!!!!!!!!!!
офф топ!
на вопрос не получил ответа...
|
|
23.10.2012, 16:27
|
Новичок на форуме
|
|
Регистрация: 18.10.2012
Сообщений: 6
|
|
Да я не первый день на js программирую.
Я знаю что такое калбеки и тд.
Я привёл вопрос в первом сообщении, можете ещё раз посмотреть.
Отличие в
1) после отработки вызовет просто функцию калбек!
2) он вызавет замыкание по имени, никаких калбеков вообще нет (тоесть нет никаких упоминаний), и вот если есть подписи на этот именованое событие уже срабатывают тригеры (туева куча каллбеков хоть вызывается)
вопрос опять (снова), с какой точки зрения правильнее разрабатывать приложения на js?
Или ещё такой: когда использовать то, а когда то? (примерный ответ дал tenshi)
П.С. Без готового фреймворка, так как там всё становится понятнее
Последний раз редактировалось zoh, 23.10.2012 в 16:53.
|
|
23.10.2012, 17:00
|
Новичок на форуме
|
|
Регистрация: 18.10.2012
Сообщений: 6
|
|
Tenshi,
Только сейчас разглядел, то что ты предложил, никак "не лучше, чем 2", это ближе к калбекам, потому что при $.bind() могут быть вызовы вообще из разных контекстов, а тут eventRunning долже быть в замыкании.
Пример:
система авторизации, и модуль пользователя
|
|
23.10.2012, 17:01
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от zoh
|
Как лучше что и где применять?
|
одно и то же. лучше выбирать то, что больше нравится.
Сообщение от zoh
|
вопрос опять (снова), с какой точки зрения правильнее разрабатывать приложения на js?
|
не надо к каждой функции указывать коллбек - скрипт может превратиться в асинхронное чудо, которое похоже на Node.js - кто программировал на нём, не на шутку знает, как задалбливает к каждой функции писать коллбек, и как иногда бывает трудно скомбинировать действия.
ну, давайте подумаем, чем отличается функция обратного вызова от системы событий.
чем ? да ничем - второе является расширением функциональности первого.
в обсерверах (подписчик) есть имена событий, в коллбеках - нет. больше различий не вижу.
|
|
23.10.2012, 21:12
|
Профессор
|
|
Регистрация: 20.03.2008
Сообщений: 1,183
|
|
Сообщение от zoh
|
Tenshi,
Только сейчас разглядел, то что ты предложил, никак "не лучше, чем 2", это ближе к калбекам, потому что при $.bind() могут быть вызовы вообще из разных контекстов, а тут eventRunning долже быть в замыкании.
Пример:
система авторизации, и модуль пользователя
|
eventRunning может быть спрятан в коллбэке, чтобы никто снаружи не мог его вызвать. а может быть доступен глобально, чтобы кто угодно мог его вызывать. смотря что нужно.
Пример:
MySuperApplication.AuthorizationSystem.eventUserLogged.listen( function( user ){
if( prompt( 'Добрый день, не хотите ли отведать этих мягких французских булак, да выпить йаду?' ) )
document.location= '/my/cookies/'
})
__________________
.ня
|
|
|
|