Управление событиями в Ext JS

В дополнение к последовательному объектно-ориентированному проектированию Ext JS обеспечивает простое и хорошо продуманное событийно-ориентированное проектирование. Основа всех событий в Ext JS — базовый абстрактный класс Ext.util.Observable, который предоставляет все, что нужно для работы с событиями.

Ext.util.Observable.addEvents

addEvents( Object object ) : void

Обычно вызывается в конструкторе класса, производного от Observable, метод addEvents определяет коллекцию всех событий, которые данный класс может генерировать. Однако, если разработчик попытается вызвать addListener или fireEvent для неопределенного события, то оно будет автоматически добавлено в коллекцию. Из-за этого метод в настоящее время используется только для документации.

MyClass = Ext.extend(Ext.util.Observable, {
	constructor: function() {
		this.addEvents({
			click: true,
			keyUp: true,
			keyDown: true
		});
	}
});

Ext.util.Observable.addListener / .on

addListener( String eventName, Function handler, [Object scope],
	[Object options] ): void
on( String eventName, Function handler, [Object scope],
	[Object options] ) : void

Это типичный метод addListener, он принимает параметры eventName и handler. Ленивые программисты, как я, могут сократить название метода до on. При необходимости можно передать объект scope. Есть несколько вариантов четвертого параметра:

  • delay — Number — Количество миллисекунд, через которое вызовется обработчик после события.
  • single — Boolean — true для обработки первого вызова, после чего прослушивание приостанавливается.
  • buffer — Number — Похоже на задержку, но если событие вызывается более одного раза в течение указанного числа миллисекунд, обработчик выполняется только один раз.

Вот простейшая форма метода:

var instance = new MyClass();
instance.on(“click”, onClick);

Также можно добавить несколько обработчиков одновременно:

instance.on({
	click: onClick,
	keyUp: onKeyUp
});

Если вы фанатик, то можете добавить несколько обработчиков с параметрами:

instance.on({
	// handle the click event once
	click: {fn: onClick, single: true},
	// handle the keyUp event after a second of
	keyUp: {fn: onKeyUp, buffer: 1000}
	// no other keyUp events
});

Ext.util.Observable.removeListener / .un

removeListener( String eventName, Function handler,
	[Object scope] ) : void
un( String eventName, Function handler, [Object scope] ) : void

Этот метод приостанавливает прослушивание события eventName обработчиком handler. Если обработчик был добавлен для определенной области, вы должны указать scope, удаляя его.

Ext.util.Observable.fireEvent

fireEvent( String eventName, Object... args ) : Boolean

Этот метод вызывает событие eventName и передает указанные параметры каждому обработчику. Обработчики вызываются в том порядке, в котором они были добавлены.Если обработчик возвращает false, оставшиеся обработчики не вызываются и fireEvent возвращает false. Следующий пример вызывает передает событие click с двумя параметрами:

>if (!instance.fireEvent(“click”, 1, 2)) {
	alert(“a handler returned false”);
}

Ext.util.Observable.hasListener

hasListener( String eventName ) : Boolean

Этот метод проверяет, прослушивает ли событие обработчик eventName.

Ext.util.Observable.purgeListeners

purgeListeners() : void

Этот метод удалает всех слушателей:)

Ext.util.Observable.relayEvents

relayEvents( Observable o, Array events ) : void

Этот метод вызывает указанные события для других объектов Observable.

В следующем примере каждый раз, когда anotherInstance передает событие click или keyUpinstance тоже вызывает эти события.

instance.relayEvents(anotherInstance, [“click”, “keyUp”]);

Два объекта instance, переданные в relayEvents не могут быть одного типа.

Ext.util.Observable.suspendEvents / .resumeEvents

suspendEvents() : void
resumeEvents() : void

Метод suspendEvents предотвращает передачу событий, а resumeEvents восстанавливает нормальную работу:)

Ext.util.Observable.capture / .releaseCapture

capture( Observable o, Function fn, [Object scope] ) : void
releaseCapture( Observable o ) : void

Метод capture назначает один обработчик для всех событий указанного объекта Observable. Этот обработчик будет вызываться раньше всех остальных. Можно указать необязательный параметр scope. По сути, метод capture создает перехватчик функции fireEvent для указанного объекта.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>