Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Уничтожить обьект, а то эвенты продолжают стрелять 
:(
    Опции темы
Kefir
Дата 27.4.2008, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: нет
Всего: 87



В общем так. Есть класс Timeline (cделанный при помощи mootools). Это "временная прямая", на которой есть события. При каждом событии осуществляется fireEvent('onSwitch', eventId). Так вот, с определённой периодичностью скрипт обновляет расписание эвентов (получает Json от ПХП скрипта) - ф-ции запроса и обработки ответа следующие:
Код

                requestData: function () {
                    jsonRequest = new Json.Remote(this.options.jsonUrl, {onComplete: this.handleData}).send();
                },
                handleData: function(data) {
                    this.jsonData = data;                    
                    this.timeline = null;
                    this.timeline = new Timeline({switches: this.jsonData['switches']});
                },

Как видите, всё просто с каждым ответом я создаю новый Timeline с обновлёнными switches (они же эвенты). Так вот проблема в том что я то новый таймлайн создаю, а старые где то там ещ остаются и тоже стреляют свои эвенты. Вопрос - что с ними сделать? delete this.timeline пробовал, this.timeline = null пробовал - не помогают. или нельзя стирать обьекты вообще?
PM MAIL WWW Skype   Вверх
Itsys
Дата 27.4.2008, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 12
Всего: 34



Насколько я понимаю, для хранения и вызывания event-ов, используется какой-то конкретный объект в DOM модели, и присваивание ссылке на timeline null не удаляет этот объект, и, соответственно, надо в DOM отдельно заниматься удалением созданных при инициализации (new Timeline) объектов.

ЗЫ Не смотрел библиотеку mootools, так что это только предположение.
ЗЗЫ Посмотри, может они предусмотрели функцию-дестроер объекта, которую можно вызвать как-то так: this.timeline.destroy();
PM MAIL WWW Skype   Вверх
SelenIT
Дата 27.4.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Цитата(Kefir @  27.4.2008,  15:53 Найти цитируемый пост)
расписание эвентов

Если я верно понимаю, "расписание" это фактически устанавливает массив таймаутов? Тогда перед обnullением объекта надо бы пройтись по этим таймаутам и отclearTimeoutить их...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Itsys
Дата 27.4.2008, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 12
Всего: 34



Цитата(SelenIT @  27.4.2008,  22:07 Найти цитируемый пост)
это фактически устанавливает массив таймаутов

Будет фигово, если это вообще не массив, а просто задание таймаутов без внесения их в массив, тогда их фиг уберешь. smile 
Kefir, вообще надо смотреть, что присходит при инициализации объекта Timeline.
PM MAIL WWW Skype   Вверх
Kefir
Дата 27.4.2008, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: нет
Всего: 87



SelenIT, почти. на каждом эвенте ставится таймаут на следующий эвент, дабы не ставить много таймаутов. только суть вопроса не в этом - я понимаю, что JS - язык странный и не похожий на другие, но вот скажите - есть у меня обьект, у него свои переменные, свои эвенты какие то, на эти эвенты подписываются другие объекты. так вот вопрос - можно ли как то элиминировать этот обьект? я не спрашиваю можно ли сделать clearTimeout для каждого setTimeout - я и так знаю что это можно сделать. я спрашиваю есть ли способ полностью удалить / уничтожить / сжечь / трансклюкировать обьект (переменную)?


Цитата(Itsys @  27.4.2008,  17:11 Найти цитируемый пост)
this.timeline.destroy(); 

это было первое что я проверил В)
PM MAIL WWW Skype   Вверх
Itsys
Дата 27.4.2008, 23:45 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 12
Всего: 34



Цитата(Kefir @  27.4.2008,  23:28 Найти цитируемый пост)
что JS - язык странный и не похожий на другие

Это не язык странный, а работа с объектами у него такая - при обнулении объекта - ты уничтожаешь все его внутренние переменные, но setTimeout запускается и исполняется не внутри объекта, а в глобальной области, в объекте хранится только ссылка на переменную (если вообще хранится), которая "уничтожает" setTimeout с помошью функции clearTimeout, при обнулении этой переменной остановка setTimeout не проиходит - поэтому единственный способ его остановить - это перед обнулением объекта послать команду на остановку. Тоже самое происходит при создании элементов внутри объекта, например функцией createElement, и добавлении их в DOM.
PM MAIL WWW Skype   Вверх
MoZy
Дата 1.5.2008, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 4.6.2006

Репутация: нет
Всего: 0



Может при обнулении диструктор вызывается?
--------------------
Experimentia est optima rerum magistra
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0823 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.