Здравствуйте. Имеется вот такой bemjson:
({
block: 'page-part',
content: [{
block: 'liquid-if',
conditions: [{
condition: 'blabla !=2',
content: [{
block: 'tatata',
content: [{
block: 'liquid-if',
conditions: [{
condition: 'tata == 3',
content: 'Hello!'
}]
}]
}]
}]
}]
})
Его обрабатывает вот такой bemhtml:
block('liquid-if')(
bem()(false),
match(function() { return this.ctx.conditions})(
def()(function() {
var ctx = this.ctx.conditions,
arr = [];
ctx.forEach(function(item, i) {
if (typeof(ctx[i].condition) !== 'undefined') {
if (i === 0) {
arr.push('{% if '+ ctx[i].condition +' %}')
} else {
arr.push('{% elseif '+ ctx[i].condition +' %}')
}
} else {
arr.push('{% else %}')
}
arr.push(ctx[i].content)
});
arr.push('{% endif %}');
return applyCtx(arr)
})
)
);
На выходе получаем такой html:
{% if blabla !=2 %}
<div class="tatata">
<div></div>
</div>{% endif %}
Вопрос: из-за чего вложенный блок не применяет шаблон по моде default, хотя bem()(false)
отрабатывает?
@Mr-Robby предположительно используется старая версия
bem-xjst
и/или базовых шаблонов. Я взял актуальную версиюproject-stub
и на ней данный код генерирует:PS: Шаблон можно сократить до:
@tadatuta, спасибо большое! Всего лишь нужно было обновить bem-core с v2.6.0 до v2.7.0 :)