Создал блок и перенес content в bemhtml блока из bemjson страницы и кнопка сразу перестала показываться. bemhtml блока:
block('login')(
content()(function() {
return [{
block: 'button',
mods: { theme: 'islands', size: 'l' },
text: 'Войти'
}];
})
)
bemjson страницы:
content: [
...
{ block: 'login' }
...
]
Результат следующий:
<div class="button button_theme_islands button_size_l"></div>
Подскажите что не хватает и если есть возможность киньте ссылку в доке на решение.
@antonowano вы объявляете блок login, а в bemjson блок search. Либо я не понял вопроса.
Кстати, можно писать без []:
Это описка, в рабочем есть и login и search. хотел привести пример с search. я исправил в примере. Хотелось бы узнать причину почему не работает.
Может дело в отсутствии mix?
@antonowano Предположу, что не описаны зависимости (см. https://ru.bem.info/tools/bem/bem-tools/depsjs/)
Вот, кнопки появились, но пока что без стилей от islands
@antonowano а уровни со стилями в сборку включены? в зависимостях к блоку login указана кнопка и соответствующие модификаторы?
да, всё-таки дело в зависимостях. как несколько блоков включить в зависимость?
Кстати, прописывая зависимость в одном блоке, она появляется и в другом.
вот пример кучи всяких разных зависимостей
Передавать их в массиве:
Читается как «блок зависит от блоков
b1
,b2
,b3
с модификаторомm1
со значениямиval1
иval2
, а также от элементов блокаb3
:b3__e1
,b3__e2
иb3__e3_elemMod1_value1
.Все верно. Все зависимости в процессе сборки суммируются и финальные файлы (css, js, шаблоны) строятся путем склейки (и, если необходимо, компиляции) соответствующих файлов для всех собранных зависимостей. Но в идеале на это не рассчитывать и писать все зависимости каждому блоку честно, чтобы сохранялось правило независимости блоков — они не должны сломаться, если вдруг из проекта исчезнет блок, который раньше предоставлял нужную зависимость данному.
чем mustDeps отличается от shouldDeps?
По ссылке выше:
mustDeps (массив/объект) — определяются зависимости, гарантированно попадающие в результаты сборки до кода блока, в котором эти зависимости объявляются shouldDeps (массив/объект) — определяются зависимости, порядок подключения которых не важен
Не совсем понял, когда мне это может пригодиться, но думаю по мере разработки на BEM - пойму. Всем спасибо за отвеченные вопросы.
На самом деле, все зависит от процесса сборки, и гарантия дается на то, что прописанные в must блоки будут раньше в списке на сборку для технологии (кода) сборки, а при should — порядок не важен, но важно наличие; правда, не думаю, что стоит в это закапываться в самом начале пути, но забывать не стоит, штука очень гибкая ;-). Но в общем случае — все так, как сказал @apsavin.
При использовании
modules
особый смысл теряется, конечно, потому что сам кодmodules
подключается всегда первым и все остальное делается через него. А в случае, когда вам нужно при загрузке страницы выполнить синхронно какой-то код в определенном порядке — без must не обойтись. Ну и не стоит забывать про css, шаблоны: там порядок тоже важен, и deps работают и для них тоже.Теперь понял, спасибо.