![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
В общем так. Есть класс Timeline (cделанный при помощи mootools). Это "временная прямая", на которой есть события. При каждом событии осуществляется fireEvent('onSwitch', eventId). Так вот, с определённой периодичностью скрипт обновляет расписание эвентов (получает Json от ПХП скрипта) - ф-ции запроса и обработки ответа следующие:
Как видите, всё просто с каждым ответом я создаю новый Timeline с обновлёнными switches (они же эвенты). Так вот проблема в том что я то новый таймлайн создаю, а старые где то там ещ остаются и тоже стреляют свои эвенты. Вопрос - что с ними сделать? delete this.timeline пробовал, this.timeline = null пробовал - не помогают. или нельзя стирать обьекты вообще? |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 12 Всего: 34 |
Насколько я понимаю, для хранения и вызывания event-ов, используется какой-то конкретный объект в DOM модели, и присваивание ссылке на timeline null не удаляет этот объект, и, соответственно, надо в DOM отдельно заниматься удалением созданных при инициализации (new Timeline) объектов.
ЗЫ Не смотрел библиотеку mootools, так что это только предположение. ЗЗЫ Посмотри, может они предусмотрели функцию-дестроер объекта, которую можно вызвать как-то так: this.timeline.destroy(); |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 49 Всего: 401 |
Если я верно понимаю, "расписание" это фактически устанавливает массив таймаутов? Тогда перед обnullением объекта надо бы пройтись по этим таймаутам и отclearTimeoutить их... -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 12 Всего: 34 |
||||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
SelenIT, почти. на каждом эвенте ставится таймаут на следующий эвент, дабы не ставить много таймаутов. только суть вопроса не в этом - я понимаю, что JS - язык странный и не похожий на другие, но вот скажите - есть у меня обьект, у него свои переменные, свои эвенты какие то, на эти эвенты подписываются другие объекты. так вот вопрос - можно ли как то элиминировать этот обьект? я не спрашиваю можно ли сделать clearTimeout для каждого setTimeout - я и так знаю что это можно сделать. я спрашиваю есть ли способ полностью удалить / уничтожить / сжечь / трансклюкировать обьект (переменную)?
это было первое что я проверил В) |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 12 Всего: 34 |
Это не язык странный, а работа с объектами у него такая - при обнулении объекта - ты уничтожаешь все его внутренние переменные, но setTimeout запускается и исполняется не внутри объекта, а в глобальной области, в объекте хранится только ссылка на переменную (если вообще хранится), которая "уничтожает" setTimeout с помошью функции clearTimeout, при обнулении этой переменной остановка setTimeout не проиходит - поэтому единственный способ его остановить - это перед обнулением объекта послать команду на остановку. Тоже самое происходит при создании элементов внутри объекта, например функцией createElement, и добавлении их в DOM. |
|||
|
||||
MoZy |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 4.6.2006 Репутация: нет Всего: 0 |
Может при обнулении диструктор вызывается?
--------------------
Experimentia est optima rerum magistra |
|||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |