Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.10.2012, 14:02
zoh zoh вне форума
Новичок на форуме
Отправить личное сообщение для zoh Посмотреть профиль Найти все сообщения от zoh
 
Регистрация: 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);
}


разница - в одного передётся калбек функция, а во втором случае просто подписка.



Я не могу прочуять "соль"!
Как лучше что и где применять?

Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 18.10.2012, 19:53
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

второй вариант лучше как-то так:

var eventRunning= new EventRouter

......

eventRunner.listen( function( value ){
    return value * 1000
} )

......

function a( value ){
   eventRunning( value )
}


но события имеет смысл применять лишь когда обработчиков может быть произвольное число(0, 1, много) и результат их отработки нам не особо важен. а даже если какой-нибудь из них упадёт с исключением - это его личные трудности и нас они не касаются.

коллбэки дают более простую логику работы, так что где не требуются события лучше применять их
__________________
.ня
Ответить с цитированием
  #3 (permalink)  
Старый 18.10.2012, 21:06
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

Не понял вопроса, ты не понимаешь где нужно юзать систему событий а где юзать калбаки? и противопоставляешь их?

п.с. не понял, при чем тут "делегирование"
Ответить с цитированием
  #4 (permalink)  
Старый 19.10.2012, 10:37
zoh zoh вне форума
Новичок на форуме
Отправить личное сообщение для zoh Посмотреть профиль Найти все сообщения от zoh
 
Регистрация: 18.10.2012
Сообщений: 6

tenshi, да думаю это единственное различие.

Я не писал делегирование, я написал delegate по аналогии метода jQuey .delegate()

Дополнение
1) Да, я не понимаю где их юзать и противопоставляю их, так как они выполняют одинаковую функцию (это на мой взгляд)
2) Я не вижу приимущества в архитектурном плане какой вариант предпочительней.
Ответить с цитированием
  #5 (permalink)  
Старый 20.10.2012, 10:23
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

Сообщение от zoh
Я не писал делегирование
делегейт это делегировать! и не кто не говорит что ты писал "делегирование" !
__________________
http://javascript.ru/forum/image.php?type=sigpic&userid=17626&dateline=135058  0633

Последний раз редактировалось Livanderiaamarum, 20.10.2012 в 10:26.
Ответить с цитированием
  #6 (permalink)  
Старый 22.10.2012, 09:35
zoh zoh вне форума
Новичок на форуме
Отправить личное сообщение для zoh Посмотреть профиль Найти все сообщения от zoh
 
Регистрация: 18.10.2012
Сообщений: 6

jQuery.delegate() !!!!!!!!!!!!
офф топ!

на вопрос не получил ответа...
Ответить с цитированием
  #7 (permalink)  
Старый 23.10.2012, 16:27
zoh zoh вне форума
Новичок на форуме
Отправить личное сообщение для zoh Посмотреть профиль Найти все сообщения от zoh
 
Регистрация: 18.10.2012
Сообщений: 6

Да я не первый день на js программирую.
Я знаю что такое калбеки и тд.

Я привёл вопрос в первом сообщении, можете ещё раз посмотреть.

Отличие в
1) после отработки вызовет просто функцию калбек!

2) он вызавет замыкание по имени, никаких калбеков вообще нет (тоесть нет никаких упоминаний), и вот если есть подписи на этот именованое событие уже срабатывают тригеры (туева куча каллбеков хоть вызывается)



вопрос опять (снова), с какой точки зрения правильнее разрабатывать приложения на js?

Или ещё такой: когда использовать то, а когда то? (примерный ответ дал tenshi)

П.С. Без готового фреймворка, так как там всё становится понятнее

Последний раз редактировалось zoh, 23.10.2012 в 16:53.
Ответить с цитированием
  #8 (permalink)  
Старый 23.10.2012, 17:00
zoh zoh вне форума
Новичок на форуме
Отправить личное сообщение для zoh Посмотреть профиль Найти все сообщения от zoh
 
Регистрация: 18.10.2012
Сообщений: 6

Tenshi,

Только сейчас разглядел, то что ты предложил, никак "не лучше, чем 2", это ближе к калбекам, потому что при $.bind() могут быть вызовы вообще из разных контекстов, а тут eventRunning долже быть в замыкании.

Пример:
система авторизации, и модуль пользователя
Ответить с цитированием
  #9 (permalink)  
Старый 23.10.2012, 17:01
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от zoh
Как лучше что и где применять?
одно и то же. лучше выбирать то, что больше нравится.

Сообщение от zoh
вопрос опять (снова), с какой точки зрения правильнее разрабатывать приложения на js?
не надо к каждой функции указывать коллбек - скрипт может превратиться в асинхронное чудо, которое похоже на Node.js - кто программировал на нём, не на шутку знает, как задалбливает к каждой функции писать коллбек, и как иногда бывает трудно скомбинировать действия.


ну, давайте подумаем, чем отличается функция обратного вызова от системы событий.

чем ? да ничем - второе является расширением функциональности первого.

в обсерверах (подписчик) есть имена событий, в коллбеках - нет. больше различий не вижу.
Ответить с цитированием
  #10 (permalink)  
Старый 23.10.2012, 21:12
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

Сообщение от zoh Посмотреть сообщение
Tenshi,

Только сейчас разглядел, то что ты предложил, никак "не лучше, чем 2", это ближе к калбекам, потому что при $.bind() могут быть вызовы вообще из разных контекстов, а тут eventRunning долже быть в замыкании.

Пример:
система авторизации, и модуль пользователя
eventRunning может быть спрятан в коллбэке, чтобы никто снаружи не мог его вызвать. а может быть доступен глобально, чтобы кто угодно мог его вызывать. смотря что нужно.

Пример:

MySuperApplication.AuthorizationSystem.eventUserLogged.listen( function( user ){
    if( prompt( 'Добрый день, не хотите ли отведать этих мягких французских булак, да выпить йаду?' ) )
        document.location= '/my/cookies/'
})
__________________
.ня
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Mootools fade callback или chain Alexander Majesty Библиотеки/Тулкиты/Фреймворки 3 08.04.2010 15:58