Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.06.2012, 10:44
Новичок на форуме
Отправить личное сообщение для bunta Посмотреть профиль Найти все сообщения от bunta
 
Регистрация: 09.09.2010
Сообщений: 6

Вещатели - наблюдатели - обработчики.
Добрый день!

В XUL есть такая замечательная вещь как вещатели и наблюдатели.
В двух словах - один (или несколько) тегов налюдает(ют) за изменением атрибутов другого (других) тегов.

Подробнее на русском:
http://www.intuit.ru/department/se/mozilla/6/4.html

Очень удобная вещь. Позволяет отказаться от навешивания событий на элементы.
Но есть один недостаток.
Эта штука работает только при изменении атрибутов элементов (тегов). Н.п.: element.setAttribute('color', 'red').

При изменении свойств элемента н.п.:
element.childNodes.length ( в случае добавления дочернего элемента)
эта штука не работает.

В идеале хотелось бы иметь следующую возможность.
Создать такой javascript- объект наблюдатель, которому при создании передаются ссылки на наблюдаемые js или DOM объекты (их свойства) - вещатели и, функцию - обработчик, которая бы срабатывала каждый раз, когда происходит какое либо изменение в наблюдаемом объекте (со свойствами объекта ).

пример:

/** Массив из свойств наблюдаемых объектов - */
var node = document.getElementById('main');
var ao = [ node.childNodes, node.style.color];

/** Функция - обработчик */
var hnd = function (el, prop, old_value, new_value){ 
	var msg = "";
	if (prop=='childNodes'){
		if (prop.length == 10){
			msg = "Число дочерних узлов достигло 10!";
			node.setAttribute('color', 'red'); 
			clearInterval(it);
		}	
		alert(msg);   
	};

	if (prop=='color'){
		msg = "Цвет элемента изменился со значения "
		+ old_value +" на " +new_value; 		
		alert(msg);   
	};


};

/** Создание обозревателя */
var obs = new Observer(ao, hnd);

/** Функция для проверки */
var f = function(){
	var span = document.createElement('span')
	node.appendChild(span); 
} 
 
var it = setInterval(f, 1000);

Последний раз редактировалось bunta, 21.06.2012 в 10:48.
Ответить с цитированием
  #2 (permalink)  
Старый 22.06.2012, 10:57
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от bunta
В идеале хотелось бы иметь следующую возможность.
Создать такой javascript- объект наблюдатель, которому при создании передаются ссылки на наблюдаемые js или DOM объекты (их свойства) - вещатели и, функцию - обработчик, которая бы срабатывала каждый раз, когда происходит какое либо изменение в наблюдаемом объекте (со свойствами объекта ).
Наши мечты совпадают. Только мне надо механизм, который наблюдает/оповещает обо ВСЕХ событиях, возникающих в DOM. Или в Window. В частности, когда кто-то добавляет в DOM новый элемент, когда кто-то навешивает на элемент свой обработчик (например, onclick... onerror), когда кто-то добавляет новую функцию javascript. Ну хоть что-нибудь из этого...
мечты...
Ответить с цитированием
  #3 (permalink)  
Старый 22.06.2012, 12:16
Новичок на форуме
Отправить личное сообщение для bunta Посмотреть профиль Найти все сообщения от bunta
 
Регистрация: 09.09.2010
Сообщений: 6

Может быть Harmony Proxy ?
Но я в нем толком ничего не понял. Примеров мало и те слишком сложные.
Ответить с цитированием
  #4 (permalink)  
Старый 23.06.2012, 20:21
Новичок на форуме
Отправить личное сообщение для bunta Посмотреть профиль Найти все сообщения от bunta
 
Регистрация: 09.09.2010
Сообщений: 6

http://www.w3.org/TR/dom/#mutation-observers

Вот хорошая штука. Если повесить на окно отлавливает очень много. Но все равно не то. Работает только по DOM. Вот если бы то же самое но всем js объектам.
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить все обработчики события элемента FINoM Общие вопросы Javascript 10 28.12.2011 11:56
load и множественные обработчики zukalo jQuery 0 02.05.2011 17:54
Скопировать обработчики событий с одного элемента на другой. Jurasmi Events/DOM/Window 3 10.11.2010 18:03
Обработчики после ajax-запросов InviS jQuery 2 05.04.2010 13:20