КХМ, поковырял.
Ext.EventObject - это обёртка над родным обьектом события в браузере, служит для повышения кросс браузерности. Тоесть где нет события браузера, там нет EventObject. Так как change инициируется не событием браузера то и EventObject к этому событию ни какого отношения не имеет.
что касается события Change вообще.
Генерация события происходит в методе checkChange класса numberfield
запуск этой функции инициализируется методами вроде setValue
checkChange: function() {
if (!this.suspendCheckChange) {
var me = this,
newVal = me.getValue(),
oldVal = me.lastValue;
if (!me.isEqual(newVal, oldVal) && !me.isDestroyed) {
me.lastValue = newVal;
// вот здесь генерируется событие
me.fireEvent('change', me, newVal, oldVal);
me.onChange(newVal, oldVal);
}
}
},
тобиш мы можем создать свой собственный класс customNumberfield унаследовав его от numberfield.
Далее можем переопределить checkChange и генерировать события в том виде в каком они нам удобны.
Вплоть до замены события вызвом функции, или генерации события только в определённых случаях.
.....
Теперь, что касается механизьма событий.
FireEvent() берёт информацию о событии из обьекта events
Кстатии сам он нечего не вызывает, а просто передаёт работу
continueFireEvent который и обеспечивает всплытие в цикле do While. Цикл прерывается через break, если обработчик события возвращает false.
в events можно найти много чего вкусного.
к примеру
events[имя события].bubble - флаг отвечающий за всплытие.
events[имя события].listeners - массив с обработчиками этого события.
Если в двух словах пробежатся по всему алгоритму то.
1) continueFireEvent находит родителей по цепочке и вызывает для них метод Fire.
2) метод
fire перебирае в цикле events[имя события].listeners и вызывает fireFn (функцию обработчик события)
До кучи отпишусь откуда берутся обработчики, вдруг кому интересно.
когда вы устанавливаете обработчик в listeners. ТО обьект listeners передаётся в конструкторе методу on.
me.on(me.listeners);
То есть, установка обработчика через on и listeners, суть одно и тоже. (выходит я угадал во втором посте)
метод on в свою очередь это псевдоним метода addListener.
основная задача addListeners сводится к заполнению обьекта events.
addListeners в цикле перебирает те события которые вы ему передали (если их несколько)
добавление события происходит так.
me.events[ename] = event = new Ext.util.Event(me, ename); //ename - Имя события
Даже незнаю что ещё можно добавить ))