Skip to content

Instantly share code, notes, and snippets.

@vkz
Last active August 29, 2015 14:11
Show Gist options
  • Save vkz/37457a7f59c3a290be55 to your computer and use it in GitHub Desktop.
Save vkz/37457a7f59c3a290be55 to your computer and use it in GitHub Desktop.
bemxjst applyCtx() косяк или фича

Отдаем 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'];});

Это косяк или меня клинит?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment