infrajs/event

There is no license information available for the latest version (v1.0.13) of this package.

v1.0.13 2020-08-05 09:47 UTC

This package is auto-updated.

Last update: 2024-12-05 19:25:23 UTC


README

События позволяют реализовать сложную связь разных расширений. Сделать взаимодействие двух расширений более универсальным и стандартизированным. Используя определённые события из расширения А, расширение Б может выполнять свои задачи, о которых расширению А заранее ничего не было известно, что и обеспечивает меньшую связанность.

Установка через composer

{
	"require":{
		"infrajs/event":"~1"
	}
}

Использование

Тестирование

Для выполнение тестов откройте в браузере /vendor/infrajs/event/tester.php

Описание

Event::handler('onshow', function(){
	echo 'onshow';
});
Event::fire('onshow');
Event::handler('print', function(){
	echo 'World';
}, ':somekey');
Event::handler('print', function(){
	echo 'Hello ';
},'somekey');
Event::fire('print');
Есть нативный объект ```Event``` по этому в javascript нужно использовать ```Events```
Events.handler('print', function(){
	console.log('World');
}, ':somekey');
Events.handler('print', function(){
	console.log('Hello ');
},'somekey');
Events.fire('print');

Наличие события c Hello не обязательно для того чтобы сработала подписка с World, но если такой handler есть, то World сработает вторым, после обработчика с клчём somekey.

Если все подписки имеют ключи и нет ниодного выполненного ключа, то будет выполнена первая подписка в очереди.

Работа с Infrajs

При генерации событий Event все конфиги установленных или необходимых модулей должны быть обработаны. Чтобы были собраны все подписки.

	\infrajs\config\Config::get();

Другими словами, использование событий обязывает собирать конфиги всех установленных расширений.

События одного класса

Если генерируется событие для Класса нужно указать критерий отличия передаваемых объектов друг от друга. Объект данных это ассоциативный массив и требуется ключ, который будет определять уникальность всего массива.

Event::$classes["Yml"] = function($pos) { 
	return $pos["producer"].$pos["article"];
};

$res = Event::fire('Yml.oncheck', $pos); 
//$pos, например, массив с данными позиции каталога. Уникальность позиции определяется производителем и артикулом.