В bemhtml, правила replace и wrap при любых значениях что-то делают. Например, для значений null, undefined, true и false, в результате будут просто пустые строки. Вопрос в следующем: каким образом можно переопределить данные правила так, чтобы они не применялись в принципе?
Вот пример:
block('test')(
{
replace: '...'
},
mod('test-mod')({
// Не убирает предыдущий replace, а меняет его на пустую строку
replace: undefined
})
);
// Будет пустая строка
{
block: 'test',
mods: {test-mod: true}
}
Важно понимать два момента:
replace
иwrap
— это синтаксический сахар над вызовом базовых режимов рендеринга.applyNext()
внутриreplace
из модификатора — вызоветсяreplace
, описанный для блока. Поэтому все, что здесь можно сделать — это написать дополнительный предикат у блока, чтобы replace работал только когда никаких модификаторов нет (или когда нет какого-то конкретного модификатора):