Добрый день!
В 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);