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

Всем привет! Задача выглядит таким образом: во входящем дереве имеем некие блоки inner-one и inner-two. В шаблонах этих блоков оборачиваю их в блок wrapper примерно так:

block('inner-one')(
    def().match(function() { return !this._innerInit })(function () {
        var ctx = this.ctx;
        return local({ _innerInit : true })(function() {
            return applyCtx({
                block : 'wrapper',
                content : ctx
            });
        })
    })
);

все отлично и прекрасно, если бы не одно но - в шаблоне wrapper-a для верстки имеем вот такой код

block('wrapper')(
    match(function() { return this.isFirst(); })(
        cls()('first')
    )
);

Проблема оказалась вот в чем - во время достроения дерева позиция у inner-one имеет значение 1, а wrapper-у присваевается уже 2. Соответственно дополнительный класс не проставляется. Читал, что позиция учитывает преобразования дерева в шаблоне по пустой моде и моде content. Второй вариант отметаем сразу, с первым так и не смог разобраться. Пробовал использовать шаблон

block('inner-one')(
    match(this._mode === '')(function () {
        return applyCtx({
            block : 'wrapper',
            content : this.ctx
        });
    })
);

но получаю обратную вложенность, т. е. wrapper вложен в inner-one. Пока как временный хак сделал так

block('inner-one')(
    def().match(function() { return !this._innerInit })(function () {
        var ctx = this.ctx,
            position = this.position - 1;
        return local({ _innerInit : true })(function() {
            return applyCtx({position : position}, {
                block : 'wrapper',
                content : ctx
            });
        })
    })
);

но восторга он у меня не вызывает. Каким образом можно "по-правильному" обойти момент с позицией? Ну или вложить блок в другой в шаблоне по пустой моде?