Решил я попробовать обернуть сторонний виджет в блок БЭМ, возьмем например Yandex Share
<script type="text/javascript" src="//yandex.st/share/share.js"
charset="utf-8"></script>
<div class="yashare-auto-init" data-yashareL10n="ru"
data-yashareQuickServices="vkontakte,facebook" data-yashareTheme="counter"></div>
Я создаю блок bem create -l desktop.blocks -b yashare
с содержимым
# desktop.blocks/yashare/yashare.bemhtml
`block('yashare')(
tag()('div'),
bem()(false),
cls()('yashare-auto-init'),
attrs()({'data-yashareQuickServices': '...', 'data-yashareTheme': '...')
)
/* desktop.blocks/yashare/yashare.browser.js */
modules.define('yashare', ['loader_type_js'], function(provide, loader) {
loader('//yandex.st/share/share.js', provide);
});
А теперь вопрос, как воспользоваться данным блоком, чтоб подключения share.js было единожды (это уже реализует loader), но только в случае наличия на странице блоков yashare?
Если в yashare.browser.js добавить modules.require(['yashare'], function() {}); то подключение скрипта будет вне зависимости от наличия на странице блоков.
В качестве виджета может быть и другой, главная задумка, что скрипт подключается единожды независимо от количества блоков (виджетов) на одной странице.
P.S. Из-за плохой, не структурированной, а местами просто устаревшей документации - очень высокий порог вхождения...