Войти с помощью github
Форум /

Поиграться можно тут http://bem.github.io/bem-xjst/

Пара типов данных

({
    block: 'block1'
});

или

({
    block: 'block1',
    mods: { a: 'b' }
});

Далее буду приводить по паре шаблонов где можно отсмотреть разное поведение при разных условиях и при этом ожидание результата не оправдывается

Вариант 1 (как бы правильный)

block('block1')(
    def()(function() {
        this.mods.bla = 'bla';
        this.ctx.content = '1';
        return applyNext();
    })
);

block('block1').mod('bla', 'bla')(
    def()(function() {
        this.mods.ololo = true;
        this.ctx.content = 'bla';
        return applyNext();
    })
);

вариант 2

block('block1')(
    def()(function() {
        this.mods = { bla: 'bla' };
        this.ctx.content = '1';
        return applyNext();
    })
);

block('block1').mod('bla', 'bla')(
    def()(function() {
        this.mods.ololo = true;
        this.ctx.content = 'bla';
        return applyNext();
    })
);

Вариант 3

block('block1')(
    def()(function() {
        this.ctx.mods = { bla: 'bla' };
        this.ctx.content = '1';
        return applyNext();
    })
);

block('block1').mod('bla', 'bla')(
    def()(function() {
        this.mods.ololo = true;
        this.ctx.content = 'bla';
        return applyNext();
    })
);

Вариант 4! Причем работает как нужно есть есть mods в bemjson

block('block1')(
    def()(function() {
        this.ctx.mods.bla = 'bla';
        this.ctx.content = '1';
        return applyNext();
    })
);

block('block1').mod('bla', 'bla')(
    def()(function() {
        this.mods.ololo = true;
        this.ctx.content = 'bla';
        return applyNext();
    })
);

Еще их вариации

Что интересно даже

block('block1')(
    def()(function() {
        this.mods = this.extend(this.mods, { bla: 'bla' });
        this.ctx.content = '1';
        return applyNext();
    })
);

block('block1').mod('bla', 'bla')(
    def()(function() {
        this.mods.ololo = true;
        this.ctx.content = 'bla';
        return applyNext();
    })
);

Не работает как нужно. Ожидаю что как бы я не записал модификаторы (через создание нового объекта или через ссылку. через this.mods или через this.ctx.mods) то отработают шаблоны по ним и классы будут в результате шаблонизации.

Вероятно дело в том что когда в mods пишешь новый объект ссылки теряются по этому то шаблон BEMHTML не отрабатывает то класс не проставляется в результате шаблонизации. Не доконца ясна в таком случае ситуация с this.mods и this.ctx.mods

Как это объясняется вами? И что делать? Что будет делаться если будет?