События позволяют реализовать сложную связь разных расширений. Сделать взаимодействие двух расширений более универсальным и стандартизированным. Используя определённые события из расширения А, расширение Б может выполнять свои задачи, о которых расширению А заранее ничего не было известно, что и обеспечивает меньшую связанность., (*1)
{ "require":{ "infrajs/event":"~1" } }
Для выполнение тестов откройте в браузере /vendor/infrajs/event/tester.php, (*2)
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., (*3)
Если все подписки имеют ключи и нет ниодного выполненного ключа, то будет выполнена первая подписка в очереди., (*4)
При генерации событий Event все конфиги установленных или необходимых модулей должны быть обработаны. Чтобы были собраны все подписки., (*5)
\infrajs\config\Config::get();
Другими словами, использование событий обязывает собирать конфиги всех установленных расширений., (*6)
Если генерируется событие для Класса нужно указать критерий отличия передаваемых объектов друг от друга. Объект данных это ассоциативный массив и требуется ключ, который будет определять уникальность всего массива., (*7)
Event::$classes["Yml"] = function($pos) { return $pos["producer"].$pos["article"]; }; $res = Event::fire('Yml.oncheck', $pos); //$pos, например, массив с данными позиции каталога. Уникальность позиции определяется производителем и артикулом.