Да это возможно, например
BEMJSON:
{
tag : 'div',
attrs : {
id : 'anchor1',
name : 'BEM',
},
content : [
{
tag : 'div',
attrs : {
id : 'anchor2',
name : 'BEM 2',
},
content : 'BEM text'
},
]
}
После прогона через стандартные шаблоны BEMHTML получим (
живой пример):
<div id="anchor1" name="BEM">
<div id="anchor2" name="BEM 2">BEM text</div>
</div>
Еще может быть для вашей задаче подойдет
BEMTREE. При помощи BEMTREE описывается шаблон обработки JSON-данных, который преобразует данные в BEMJSON и далее через BEMHTML получаем HTML. Пример:
Есть данные:
{
"content": "BEM Block!",
"title": "I am BEM"
}
Описываем трансформацию данных в BEMJSON на технологии BEMTREE:
block( 'someBlock' )(
def()( function () {
var data = this.ctx.data || {};
this.ctx.content = [
{ elem : 'title', content : data.title || 'Empty title' },
{ elem : 'content', content : data.content || 'Empty content' },
];
return applyNext();
} )
);
После применения на данных мы получим BEMJSON, останется только применить BEMHTML. Это и есть
двухпроходная шаблонизация.
Тут
jsfiddle.net/ilyar/5dw8Q и тут
https://goo.gl/GRGSFf — живой пример применения BEMTREE в браузере (можно и на сервере применяя те же шаблоны).