infrajs / event
Installs: 2 529
Dependents: 20
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
Requires
- infrajs/ans: ~1
- infrajs/each: ~1
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, например, массив с данными позиции каталога. Уникальность позиции определяется производителем и артикулом.