Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > XmlHttp - передача функции как обработчика событий


Автор: anian 2.8.2006, 07:12
Дано:
Код

var xr = new XmlHttpRequest();
xr.onreadystatechange = handler;
..........
function handler(){
      // ... чего-то обрабатываем
}


Сделал я свой "как-бы класс" - обертку для XmlHttpRequest:
Код

var req = XRequest();
//обработчик передаю так
req.onreadystatechange(handler);

Вопрос: как сделать передачу обработчика просто присвоением?

Автор: Sardar 2.8.2006, 11:41
anian, в оригинальном JS были геттеры/сеттеры, но их порезал MS, а следовательно и ECMA (стандарты которой иногда отличаються своей бесполезностью или ограниченностью).

В мозилле get/set есть, также есть __defineGetter__, __defineSetter__ магия. В гугле примеры.

Код
XRequest.prototype.__defineGetter__("onreadystatechange", function(){return this.httprequest.onreadystatechange;});
XRequest.prototype.__defineSetter__("onreadystatechange", function(val){ this.httprequest.onreadystatechange = val;});

Автор: anian 2.8.2006, 11:49
Смотрим код AJAX-интерфейса Яндекс-Почты:
core.js:
Код

var req=new AjaxObject();
req.onreadystatechange=handleResult;
req.open('GET','/new?count='+messagesCount,true);
req.send();


Присваивают же как-то?
Есть код...выложить?

Автор: Sardar 2.8.2006, 12:35
Цитата(anian @  2.8.2006,  10:49 Найти цитируемый пост)
Присваивают же как-то?
Есть код...выложить? 

Как ваирант при вызове open регистрируют onreadystatechange.

На встречу, а зачем эта обёртка нужна вообще, если API идеентичен оригинальному компоненту?

Автор: anian 3.8.2006, 07:37
Цитата

Как ваирант при вызове open регистрируют onreadystatechange.

Каждое слово понимаю, смысла не понимаю smile пример можно?

API идентичен, пожалуй, только присвоением обработчика...объект создается в зависимости от браузера, open в зависимости от метода какие надо заголовки выставляет, send опять же относительно браузера ставит null, данный или ничего не ставит...ну и опять же, привычка у меня классы делать smile

Автор: Sardar 3.8.2006, 13:20
Нда... это говорит только в пользу хорошего дизайна XMLHttpRequest, всё что нужно есть в компоненте сразу без обёрток smile

Цитата(anian @  3.8.2006,  06:37 Найти цитируемый пост)
пример можно?

Возможно функция опен, перед тем как передать вызов request'у ставит onreadystatechange из ранее поставленной переменной, убедись что это не так. Активных (геттеры/сеттеры) полей в ИЕ нет.

Автор: Exception 3.8.2006, 13:53
Хм, а можно выложить обёртку глянуть smile ? Интересно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)