{
elem: 'link',
mix: { block: 'link' }
}
Знаю только один способ, который в моем случае не подходит, это просто поменять местами
{
block: 'link',
mix: { block: this.block, elem: 'link'}
}
{
elem: 'link',
mix: { block: 'link' }
}
Знаю только один способ, который в моем случае не подходит, это просто поменять местами
{
block: 'link',
mix: { block: this.block, elem: 'link'}
}
Сейчас нет возможности выполнить шаблоны одновременно и на основной блок и на миксы, т.к. возникают неоднозначные моменты (если у основного блока и у миксов заданы теги, какой генерить в итоге? если и там и там есть атрибуты, их объединять или перекрывать? и так далее).
Поэтому чтобы что-то посоветовать, нужно больше подробностей про конкретную задачу.
Понял.
У
block__link
нет bemhtml шаблона только bemtree, и единственное, что передается из bemtree шаблона, это в зависимости модификатора блока ставиться соотвествующие поле urlшаблон .bemtree
И нужно чтобы после этого запустился bemhtml шаблон из bem-components
UPD: Правда, пример приведенный тут не рабочий, сейчас я разбираюсь как передать поле, в зависимосте от модификатора блока
UPD2: Вот поправил пример своего bemtree шаблона, так теперь поле
url
передается в bemjsonЯ написал что-то типо этог, оно работает, но выглядит неприятно, может есть более элегантый способ?
Сначала пара оффтопиков.
1) Если модификатор присутствует всегда, влияет только на урл и урл можно построить по значению модификатора, то нет смысла писать два разных шаблона, достаточно такого:
2) Если элемент
link
генерируется в BEMTREE и на этапе своего создания на уровне блока знает модификатор, то почему не задать полеurl
прямо там:Тогда можно полностью избавиться от BEMTREE-шаблонов на элементы.
Ну и, наконец, по теме вопроса. Да, в BEMHTML примерно так и нужно делать, разве что можно применить чуть-чуть синтаксического сахара:
Спасибо! Многое разяснило
В т.ч. почему у меня applyNext не передавал контекст. В документации написанно, что аргумент applyNext это добавочные поля к контексту, почему тогда нужно указывать
'ctx.url'
и нельзя простоapplyNext({url: ''})
?И в чем отличие
replace
отdef
, в документации не нашел ничего про replace?Здесь проблема с терминологией. В шаблоне
this
указывает на общий контекст, аthis.ctx
— на данный конкретный узел BEMJSON, к которому применяется шаблон. В документации подразумевался общий контекст, но, конечно, это место стоит расписать подробнее.С точки зрения результата — ни в чем.
replace()
— это просто синтаксический сахар надdef()
+applyCtx()
. В документацию мы про него обязательно допишем.Кажется, что в bh можно насильно в какой-то момент позвать матчер, подменив поля block, elem, mods. Например, если добавить в mix текущую сущность (block, elem, mods), а после сделать return bh.apply(ctx).
@tadatuta понял, спасибо большое!