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

У нас в проекте используются merged-бандлы. common + specifix-page Словили баг с отваливающимся инитом. Я нашёл проблему в i-bem__dom_init_auto, отключил его на уровне проекта и написал свою обёртку для старта (по загрузке всех скриптов).

Первая версия стартера (не работающая как планировалось).

modules.require(
    ['i-bem__dom_init', 'jquery', 'next-tick'],
    function(init, $, nextTick) {

let scripts = $('script')
    total = scripts.length,
    loaded = 0;

function magicPendel() {
    $(function() {
        nextTick(init);
    });
}

window.pinok = magicPendel;

scripts
    .on('load', () => {
        ++loaded;
        if (total === loaded) {
            magicPendel();
        }
    })
    .load();
});

Странно, ничего не работало, хоть и вызывалось после загрузки скриптов. Дёргаю ручку pinok в консоли, а страница мёртвая.

Делаю modules.require('i-bem__dom_init', init => init());, всё оживает. Понимаю, что где-то замыкание, но что-то не въехал откуда оно происходит (в попытках отследить через дебаггер уже начал путаться).

Рабочий стартер (но скорее всего буду дорабатывать)

modules.require(
    ['jquery', 'next-tick'],
    function($, nextTick) {

let scripts = $('script')
    total = scripts.length,
    loaded = 0;

function magicPendel() {
    $(function() {
        modules.require('i-bem__dom_init', (init) => nextTick(init));
    });
}

scripts
    .on('load', () => {
        ++loaded;
        if (total === loaded) {
            magicPendel();
        }
    })
    .load();
});