From 9de9708adae7a971b520b4645fd53bc247ceac0c Mon Sep 17 00:00:00 2001 From: Sergey Berezhnoy Date: Fri, 16 Sep 2016 17:34:11 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=B8,=20=D0=BA=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D1=8B=D0=B5=20=D0=BD=D0=B5=D0=BE=D0=B1=D1=85=D0=BE?= =?UTF-8?q?=D0=B4=D0=B8=D0=BC=D0=BE=20=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blocks-common/i-bem/__dom/i-bem__dom.js | 38 ++++++++++++++++++++----- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/blocks-common/i-bem/__dom/i-bem__dom.js b/blocks-common/i-bem/__dom/i-bem__dom.js index 48d35495..342beca5 100644 --- a/blocks-common/i-bem/__dom/i-bem__dom.js +++ b/blocks-common/i-bem/__dom/i-bem__dom.js @@ -61,10 +61,17 @@ var win = $(window), * @private * @param {jQuery} domElem DOM element * @param {String} uniqInitId ID of the "initialization wave" + * @param {Array} [blocksForInit] Specify subset of blocks for initialization */ -function init(domElem, uniqInitId) { +function init(domElem, uniqInitId, blocksForInit) { + + blocksForInit && (blocksForInit = blocksForInit.reduce(function(res, blockName) { + res[blockName] = blockName; + return res; + }, {})); var domNode = domElem[0]; + $.each(getParams(domNode), function(blockName, params) { processParams(params, domNode, blockName, uniqInitId); var block = uniqIdToBlock[params.uniqId]; @@ -74,7 +81,8 @@ function init(domElem, uniqInitId) { $.extend(block._params, params); } } else { - initBlock(blockName, domElem, params); + (!blocksForInit || blocksForInit.hasOwnProperty(blockName)) + && initBlock(blockName, domElem, params); } }); @@ -1050,19 +1058,35 @@ var DOM = BEM.DOM = BEM.decl('i-bem__dom', { * @static * @protected * @param {jQuery} [ctx=document] Root DOM node + * @param {Array} [blocksForInit] Specify subset of blocks for initialization + * @param {Function} [callback] Callback + * @param {Object} [callbackCtx] Callback context * @returns {jQuery} ctx Initialization context */ - init : function(ctx, callback, callbackCtx) { + init : function(ctx, blocksForInit, callback, callbackCtx) { + + if(!ctx || $.isFunction(ctx) || Array.isArray(ctx)) { + if(Array.isArray(ctx)) { + callbackCtx = callback; + callback = blocksForInit; + blocksForInit = ctx; + } else if($.isFunction(ctx)) { + callback = ctx; + callbackCtx = blocksForInit; + blocksForInit = undefined; + } + ctx = doc; + } - if(!ctx || $.isFunction(ctx)) { + if($.isFunction(blocksForInit)) { callbackCtx = callback; - callback = ctx; - ctx = doc; + callback = blocksForInit; + blocksForInit = undefined; } var uniqInitId = $.identify(); findDomElem(ctx, '.i-bem').each(function() { - init($(this), uniqInitId); + init($(this), uniqInitId, blocksForInit); }); callback && this.afterCurrentEvent(