Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.10.2013, 17:43
Интересующийся
Отправить личное сообщение для Den Brown Посмотреть профиль Найти все сообщения от Den Brown
 
Регистрация: 22.10.2013
Сообщений: 19

Какое DOM или BOM событие происходит, когда AJAXом перегружаем панель?
Здравствуйте!

Рад, что работа заставляет меня время от времени работать c JS - для меня он как любимое хобби.

Вот ситуация: на странице jQuery плагином рисуем календарную сетку заполненную данными, которые приходят с контроллера. Все работает.

Проблема: поставили сетку в панельку (div), который перезагружается AJAXом с разными данными в зависимсоти от того куда кликнули выше на странице.

Но после AJAX рэфреша календарь не отрисовывается.

Я еще не смотрел детали, но предполагаю что календарный JS запускается на PageLoad.

И если мы хотим, чтобы он запускался каждый раз, когда панелька обновляется, то на какое событие его fire? какие вообще DOM или BOM события происходят при перезагрузке ДИВа AJAXом?

Спасибо

Последний раз редактировалось Den Brown, 31.10.2013 в 17:47.
Ответить с цитированием
  #2 (permalink)  
Старый 31.10.2013, 18:29
Интересующийся
Отправить личное сообщение для Den Brown Посмотреть профиль Найти все сообщения от Den Brown
 
Регистрация: 22.10.2013
Сообщений: 19

От автора: вероятно данная тема больше подходит для соседнего раздела (Events, DOM) - на усмотрение модераторов - можно перенести тему туда.
Ответить с цитированием
  #3 (permalink)  
Старый 31.10.2013, 19:39
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Den Brown
какие вообще DOM или BOM события происходят при перезагрузке ДИВа AJAXом
Никаких. Но изменения можно отловить через MutationObserver. Вот только это не совсем хороший вариант. Твой скрипт сам должен генерировать событие.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 31.10.2013, 20:18
Интересующийся
Отправить личное сообщение для Den Brown Посмотреть профиль Найти все сообщения от Den Brown
 
Регистрация: 22.10.2013
Сообщений: 19

Сообщение от danik.js Посмотреть сообщение
Никаких. Но изменения можно отловить через MutationObserver. Вот только это не совсем хороший вариант. Твой скрипт сам должен генерировать событие.
Какой скрипт?

Событие какого типа?

В результате чего генеровать?

Я так понимаю. Есть JS скриптик, который постоянно следит за содержание какого-то скрытого ДОМ элемента в обновляемом диве.

При каждом обновлении контроллер забрасывает в этот скрытий элемент новое значение.

Тот самый JS скриптик видит изменение и генерирует перезапуск календарного скрипта.

Но совсем не уверен, что мои размышления идут в верном направлении. Вероятно, ларчик проще открывается...
Ответить с цитированием
  #5 (permalink)  
Старый 31.10.2013, 21:09
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Den Brown
Событие какого типа?
Можешь CustomEvent использовать, но это ни к чему (траблы с кроссбраузерностью). Проще в своем приложении реализовать свой EventEmitter интерфейс. В jQuery кстати уже встроенна поддержка событий.

В тот момент, когда ты обновляешь через ajax элемент - генерируй событие. Другой участок твоего кода, который установил обработчик на данный тип события, отработает при его возникновении.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 31.10.2013, 21:21
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

В общем чета типа:

function EventEmmiter() {
   
}

// ... реализуем интерфейс EventEmmiter

/*
 * @inherits EventEmmiter
 *
 */
function Controller() {
    EventEmitter.call(this);
}

Controller.prototype = Object.create(EventEmitter.prototype, {
    constructor: {value: Controller}
});

Controller.prototype.updateDiv = function() {
    utils.request('some/url', this.onDivContentLoaded.bind(this));
};

Controller.prototype.onDivContentLoaded = function(data) {
    document.querySelector('div').innerHTML = data;
    this.dispatchEvent('divupdated', {data: data});
};



var controller = new Controller();

controller.addEventListener('divupdated', function() {
    alert('Div was updated');
});

controller.updateDiv();
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 01.11.2013, 17:31
Интересующийся
Отправить личное сообщение для Den Brown Посмотреть профиль Найти все сообщения от Den Brown
 
Регистрация: 22.10.2013
Сообщений: 19

Спасибо danik.js .

Пожалуй, код выше - это будет сложновато для меня сейчас. Это JS работающей на сервере? Или это все ранится в браузере?

А можно поставить вопрос по другому: если сервер вернул AJAXом Див в котором есть JS скрипт: он запустится? или браузер только при первичной загрузки документа считывает весь JS, а после этого DOM может менять, а вновь пришедшие скрипты уже не будут считываться и выполняться?

Если бы скрипт пришедший с фрагментом HTML мог быть считан браузером и мог бы сам запуститься - то не было проблем.

спасибо за помощь
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какое событие? Caminante Events/DOM/Window 6 09.04.2013 12:36
какое событие возникает во время формирования html IT-AleX Events/DOM/Window 2 20.02.2009 16:13