bem / bem-core

BEM Core Library
https://ru.bem.info/technologies/classic/i-bem/
Other
276 stars 95 forks source link

Кажется странный приоритет lazyInit #1576

Closed belozer closed 6 years ago

belozer commented 6 years ago

https://github.com/bem/bem-core/blob/v4/common.blocks/i-bem-dom/i-bem-dom.js#L156

    if(!entityCls.lazyInit || ignoreLazyInit || params.lazyInit === false) {
        ignoreLazyInit && domElem.addClass(BEM_CLASS_NAME); // add css class for preventing memory leaks in further destructing

        entity = new entityCls(uniqIdToDomElems[uniqId], params, !!ignoreLazyInit);
        delete uniqIdToDomElems[uniqId];
        callback && callback.apply(entity, slice.call(arguments, 4));
        return entity;
    }

Невозможно сделать lazyInit : true на определённом блоке из html.

Как вариант, можно переписать условие так

if(ignoreLazyInit || params.lazyInit === false || !entityCls.lazyInit && !params.lazyInit)
   …
}

В добавок через lazyInit в модификаторе можно сломать поведение базового блока.

const Block = bemDom.declBlock('block', null, { lazyInit : false });
const Mod = Block.declMod({ modName : 'mod' }, null, { lazyInit : true });

console.log(Block.lazyInit, Mod.lazyInit); → true true

Предлагаю запретить использование lazyInit в declMod.