Данный блок, https://github.com/bem/bem-js-tutorial/tree/master/pure.bundles/003-element-modifier/blocks/traffic-light реализует светофор. Если светофоров, блоками вставить несколько, то мигать будет только один, последний. Вопрос: почему так? Получается Модификатор применяется только к одному блоку, последнему или всё зависит от реализации кода js в модификаторе...
@Bumerang47 Потому что переменная
timer
объявлена в замыкании в рамках модуля и все экземпляры блока ее «делят» — последний проинициализированный блок в реакции на изменение модификатораstatus
вызываетclearTimeout(timer);
, т.о. сбрасывая таймер предыдущего блока.Чтобы этого избежать, достаточно класть
timer
вthis
:И вынужден предупредить, что, к сожалению, туториал несколько устарел. Я попробую сегодня немного обновить и запушить в отдельную ветку, но полноценное обновление займет какое-то время.
Вот коммит с обновлением: https://github.com/bem/bem-js-tutorial/commit/11b4c45b303da6ea480bb55376786bea9f95b266
Спасибо, всё ясно. На форум срочно нужна кнопка "Спасибо" =)
По ходу прохождения руководства, постараюсь чем ни будь помочь в обновлении старых примеров. Очевидные поправки буду PullRequest'ить
@Bumerang47 обновили руководство на сайте, заодно переехали в правильный репозиторий https://github.com/bem/bem-js-tutorial/ Теперь должно быть все хорошо.