diff --git a/common.blocks/i-bem-dom/i-bem-dom.js b/common.blocks/i-bem-dom/i-bem-dom.js index 05cc3a7d..c1fa07e9 100644 --- a/common.blocks/i-bem-dom/i-bem-dom.js +++ b/common.blocks/i-bem-dom/i-bem-dom.js @@ -153,7 +153,7 @@ function initEntity(entityName, domElem, params, ignoreLazyInit, callback) { entityCls._processInit(); - if(!entityCls.lazyInit || ignoreLazyInit || params.lazyInit === false) { + if(ignoreLazyInit || params.lazyInit === false || !entityCls.lazyInit && !params.lazyInit) { ignoreLazyInit && domElem.addClass(BEM_CLASS_NAME); // add css class for preventing memory leaks in further destructing entity = new entityCls(uniqIdToDomElems[uniqId], params, !!ignoreLazyInit); @@ -768,6 +768,15 @@ var BemDomEntity = inherit(/** @lends BemDomEntity.prototype */{ throw Error('bemDom entities can not be created otherwise than from DOM'); }, + /** @override */ + declMod : function(mod, props, staticProps) { + if(staticProps && staticProps.lazyInit !== undef) { + throw Error('declMod with lazyInit prop not allowed. Your need use \'lazyInit\' in data-bem params'); + } + + return this.__base.apply(this, arguments); + }, + /** @override */ _processInit : function(heedInit) { /* jshint eqeqeq: false */ diff --git a/common.blocks/i-bem-dom/i-bem-dom.spec.js b/common.blocks/i-bem-dom/i-bem-dom.spec.js index 839f763b..1b90c4b5 100644 --- a/common.blocks/i-bem-dom/i-bem-dom.spec.js +++ b/common.blocks/i-bem-dom/i-bem-dom.spec.js @@ -164,6 +164,16 @@ describe('i-bem-dom', function() { block2.should.be.instanceOf(Block1); elem2.should.be.instanceOf(Elem1); }); + + it('should throw error if declMod contains lazyInit static property', function() { + var Block = bemDom.declBlock('block'); + + function mod() { + Block.declMod({ modName : 'mod' }, null, { lazyInit : true }); + } + + mod.should.throw(Error, 'declMod with lazyInit prop not allowed. Your need use \'lazyInit\' in data-bem params'); + }); }); describe('getMod', function() { @@ -1686,6 +1696,27 @@ describe('i-bem-dom', function() { spy.should.have.been.called; }); + it('should be possible to force lazy initialization', function() { + spy = sinon.spy(); + + bemDom.declBlock('block', { + onSetMod : { + 'js' : { + 'inited' : spy + } + } + }, { + lazyInit : false + }); + + rootNode = initDom({ + block : 'block', + js : { lazyInit : true } + }); + + spy.should.have.not.been.called; + }); + describe('on DOM events', function() { beforeEach(function() { spy = sinon.spy();