Пример Добавление БЭМ-сущностей для задач вёрстки из руководства по BEMHTML выдает ошибку:
Error: Only literal or function is allowed in template's body
at Compiler.assert (/vagrant/project-stub/node_modules/enb-bemxjst/node_modules/bem-xjst/node_modules/xjst/lib/xjst/compiler/base.js:180:9)
at Compiler.transformTemplates (/vagrant/project-stub/node_modules/enb-bemxjst/node_modules/bem-xjst/node_modules/xjst/lib/xjst/compiler/base.js:648:8)
at Array.map (native)
at Compiler.translate (/vagrant/project-stub/node_modules/enb-bemxjst/node_modules/bem-xjst/node_modules/xjst/lib/xjst/compiler/base.js:201:41)
at Object.translate (/vagrant/project-stub/node_modules/enb-bemxjst/node_modules/bem-xjst/node_modules/xjst/lib/xjst/api.js:16:40)
at Compiler.translate (/vagrant/project-stub/node_modules/enb-bemxjst/node_modules/bem-xjst/lib/bemhtml/compiler.js:121:35)
at Compiler.generate (/vagrant/project-stub/node_modules/enb-bemxjst/node_modules/bem-xjst/lib/bemhtml/compiler.js:707:14)
at Object.generate (/vagrant/project-stub/node_modules/enb-bemxjst/node_modules/bem-xjst/lib/bemhtml/api.js:16:40)
at require.declare.process (/vagrant/project-stub/node_modules/enb-bemxjst/techs/bem-xjst.js:7:28)
at /vagrant/project-stub/node_modules/enb-bemxjst/node_modules/sibling/lib/runner.js:22:48
Гугление подсказало обернуть матчинг флага в анонимную функцию:
block('box').match(function() { return !this.ctx._processed; })
Не помогло.
Обернул вызов applyCtx:
block('box').match(function() { return !this.ctx._processed; }).content()(function() {
applyCtx({'ctx._processed':true}, {
elem: 'left-top',
content: {
elem: 'right-top',
content: {
elem: 'right-bottom',
content: {
elem: 'left-bottom',
content: applyNext()
}
}
}
});
})
Ошибка пропала, но html сгенерировался криво:
<div class="box">
<div class="box">text</div>
<div class="box__left-top">
<div class="box__right-top">
<div class="box__right-bottom">
<div class="box__left-bottom"></div>
</div>
</div>
</div>
</div>
Подскажите, как правильно делать такую банальную вещь?