Отдаем bemxjst такой шаблон:
block('b1').mod('m1', 'v1').content()('B');
block('b1').content()('a');
block('b1').content()(function () {return [applyCtx({'mods': {'m1':'v1'}}), 'b'];});
Получаем такой результат:
function applyc(__$ctx, __$ref) {
var __$t = $$mode;
if (__$t === "content") {
var __$t = $$block;
if (__$t === "b1") {
var __$t = !$$elem;
if (__$t) {
if ((__$ctx.__$a0 & 1) === 0) {
return [ function __$lb__$0() {
var __$r__$1;
var __$l0__$2 = $$mode;
$$mode = "";
var __$l1__$3 = __$ctx.ctx;
__$ctx.ctx = {
mods: {
m1: "v1"
}
};
var __$r__$5;
var __$l2__$6 = __$ctx.__$a0;
__$ctx.__$a0 = __$ctx.__$a0 | 1;
__$r__$5 = applyc(__$ctx, __$ref);
__$ctx.__$a0 = __$l2__$6;
__$r__$1 = __$r__$5;
$$mode = __$l0__$2;
__$ctx.ctx = __$l1__$3;
return __$r__$1;
}(), "b" ];
}
return "a";
if ($$mods["m1"] === "v1" && $$mods) {
return "B";
}
}
}
}
}
Внимательно смотрим и понимаем, что вызов applyCtx с выставленной модой m1:v1 всегда вернет “a”.
Меняем местами две строчки - получаем ожидаемый результат.
block('b1').content()('a');
block('b1').mod('m1', 'v1').content()('B');
block('b1').content()(function () {return [applyCtx({'mods': {'m1':'v1'}}), 'b'];});
Это косяк или меня клинит?