EN RU
Форум

Методология

Технологии

Инструментарий

Библиотеки

Учебные материалы

DocumentationJSDocSource

Блок-хелпер, позволяющий создавать другие блоки.

Блок i-bem реализован в технологии JS.

Реализация блока в технологии JS представляет собой специализированный JavaScript-фреймворк для веб-разработки в рамках методологии БЭМ.

Модификатор elem-instances элемента dom блока i-bem

Подключение данного модификатора позволяет работать с элементами почти так же, как и с обычными блоками, т.е. любой (но не обязательно каждый) элемент может иметь свой BEM-инстанс. API инстансов элементов аналогично API блоков с некоторыми различиями, описанными ниже.

Декларация

Декларация элемента

BEMDOM.decl({ block: 'menu', elem: 'item' }, { /* properties */ }, { /* static properties */ });

Декларация модификатора элемента:

BEMDOM.decl({
    block: 'menu',
    elem: 'item',
    modName: 'state',
    modVal: 'current'
}, {
    /* properties */
}, {
    /* static properties */
});

Модификаторы элементов работают так же, как модификаторы блоков.

BEM-инстансы элементов

Для доступа к BEM-инстансам элементов используется хелпер findElemInstances, API которого аналогично хелперу findElem:

// поиск всех вложенных элементов 'item'
this.findElemInstances('item');

// строгий поиск всех вложенных элементов 'item'
this.findElemInstances('item', true);

// поиск всех вложенных модификаторов элементов 'item'
this.findElemInstances('item', 'state', 'current');

// строгий поиск всех вложенных модификаторов элементов 'item'
this.findElemInstances('item', 'state', 'current', true);

// поиск всех элементов 'item' внутри указанного контекста
this.findElemInstances(ctx, 'item');

// строгий поиск всех элементов 'item' внутри указанного контекста
this.findElemInstances(ctx, 'item', true);

// поиск всех модификаторов элементов 'item' внутри указанного контекста
this.findElemInstances(ctx, 'item', 'state', 'current');

// строгий поиск всех модификаторов элементов 'item' внутри указанного контекста
this.findElemInstances(ctx, 'item', 'state', 'current', true);

При необходимости, инстансы найденных элементов инициализируются.

Строгий поиск подразумевает фильтрацию элементов вложенных блоков с таким же именем, как у текущего блока:

{
    block: 'menu',
    content: [
        {
            elem: 'item' // (1)
        },
        {
            block: 'menu',
            content: {
                elem: 'item' // (2)
            }
        }
    ]
}
// this => block 'menu'
this.findElemInstances('item');         // найдет инстансы (1) и (2)
this.findElemInstances('item', true);   // найдет только инстанс (1)

По аналогии с хелпером elem, кэширующим результаты своей работы, для минимизации количества операций с DOM рекомендуется использовать кэширующий поиск BEM-инстансов элементов:

// кэширующий поиск всех вложенных элементов 'item'
this.elemInstances('item');

// кэширующий поиск всех вложенных модификаторов элемента 'item'
this.elemInstances('item', 'state', 'current');

Также с помощью этого хелпера можно вернуть инстансы элементов, расположенных на DOM-нодах указанной jQuery-коллекции:

this.elemInstances(domElem);

Для поиска одного (первого) BEM-инстанса элемента есть дополнительные формы этих хелперов с аналогичным API:

// поиск одного вложенного элемента 'item'
this.findElemInstance('item');

// кэширующий поиск одного вложенного элемента 'item'
this.elemInstance('item');

// вернуть инстанс элемента, расположенного на первой DOM-ноде указанной jQuery-коллекции
this.elemInstance(domElem);

Если необходимо вернуть BEM-инстанс элемента, на DOM-ноде которого подмешаны другие элементы того же блока:

this.elemInstance(this.elemify(domElem, 'item'));

Поиск снаружи контекста

Существует хелпер для поиска элемента снаружи указанного контекста:

{
    block: 'menu',
    content: {
        elem: 'item',
        content: {
            elem: 'link'
        }
    }
}
// this => block 'menu'
this.closestElem(this.elem('link'), 'item');

При поиске от имени BEM-инстанса элемента можно не указывать контекст поиска, тогда поиск будет производиться относительно DOM-ноды этого элемента:

// this => element 'menu__link'
this.closestElem('item');

По аналогии с хелперами elem и findElem, хелпер closestElem возвращает jQuery-коллекцию. Для доступа к BEM-инстансам элементов снаружи контекста используются хелперы closestElemInstance и closestElemInstances:

// this => block 'menu'
this.closestElemInstance(this.elem('link'), 'item');
this.closestElemInstances(this.elem('link'), 'item');
// this => element 'menu__link'
this.closestElemInstance('item');

Доступ к родительскому блоку

По аналогии с методом elem для получения элемента блока существует метод block для получения блока элемента.

// this => element 'menu__item'
this.block() // эквивалентно this.findBlockOutside('menu') с кэшированием результата поиска

Поиск элементов и блоков

Элемент ищет только вложенные в него элементы:

{
    block: 'menu',
    content: [
        {
            elem: 'item',
            content: {
                elem: 'link' // (1)
            }
        },
        {
            elem: 'link' // (2)
        }
    ]
}
// this => element 'menu__item'
this.findElem('link');  // будет найден только элемент (1).

Если нужно найти все элементы 'link', поиск нужно производить от имени блока-родителя:

// this => element 'menu__item'
this.block().findElem('link');    // будут найдены элементы (1) и (2).

Все это справедливо также для хелпера elem, хелперов поиска блоков (findBlockInside и др.) и описанных выше хелперов для поиска BEM-инстансов элементов.

Реакция на установку модификаторов

Блок делегирует установку модификаторов тем элементам, у которых есть свои BEM-декларации. Поэтому обработчики onSetMod элемента выполнятся, если родительский блок установит этому элементу соответствующие модификаторы:

// this => element 'menu__item'
onSetMod: {
    'state': {
        'current': function() {
            // код обработчика
        }
    }
}
// this => block 'menu'
this.setMod(this.elem('item'), 'state', 'current'); // выполнится задекларированный выше обработчик

Обработчики onElemSetMod блока выполнятся, если инстанс элемента сам установит себе соответствующие модификаторы:

// this => block 'menu'
onElemSetMod: {
    'item': {
        'state': {
            'current': function() {
                // код обработчика
            }
        }
    }
}
// this => element 'menu__item'
this.setMod('state', 'current'); // выполнится задекларированный выше обработчик

Обработчики onElemSetMod в контексте инстанса элемента не используются.

Отложенная инициализация и live-события

Рекомендуется по возможности всегда использовать отложенную инициализацию BEM-инстансов элементов. Они, как и обычные блоки, поддерживают все хелперы для работы с live-событиями. Кроме того, хелпер liveInitOnBlockEvent имеет дополнительную форму для инициализации по событию родительского блока - для этого просто опускается второй параметр (имя блока):

this.liveInitOnBlockEvent('switch', function() { /* обработчик */ });

Module i-bem

Augments:events:Emitter
Base block for creating BEM blocks

Instance methods:

on(e, [data], fn, [ctx]):BEM
description
Adds an event handler
parameters
e
String, Object
Event type
data
Object
Additional data that the handler gets as e.data
fn
Function
Handler
ctx
Object
Handler context
un([e], [fn], [ctx]):BEM
description
Removes event handler or handlers
parameters
e
String, Object
Event type
fn
Function
Handler
ctx
Object
Handler context
emit(e, [data]):BEMprotected
description
Executes the block's event handlers and live event handlers
parameters
e
String
Event name
data
Object
Additional information
hasMod([elem], modName, [modVal]):Boolean
description
Checks whether a block or nested element has a modifier
parameters
elem
Object
Nested element
modName
String
Modifier name
modVal
String, Boolean
Modifier value. If defined and not of type String or Boolean, it is casted to String
getMod([elem], modName):String,Boolean
description
Returns the value of the modifier of the block/nested element
parameters
elem
Object
Nested element
modName
String
Modifier name
getMods([elem], [...modNames]):Object
description
Returns values of modifiers of the block/nested element
parameters
elem
Object
Nested element
...modNames
String
Modifier names
setMod([elem], modName, [modVal]):BEM
description
Sets the modifier for a block/nested element
parameters
elem
Object
Nested element
modName
String
Modifier name
modVal
String, Boolean
Modifier value. If not of type String or Boolean, it is casted to String
_onSetMod(modName, modVal, oldModVal, [elem], [elemName])protected
description
Function after successfully changing the modifier of the block/nested element
parameters
modName
String
Modifier name
modVal
String
Modifier value
oldModVal
String
Old modifier value
elem
Object
Nested element
elemName
String
Element name
toggleMod([elem], modName, [modVal1], [modVal2], [condition]):BEM
description
Sets a modifier for a block/nested element, depending on conditions. If the condition parameter is passed: when true, modVal1 is set; when false, modVal2 is set. If the condition parameter is not passed: modVal1 is set if modVal2 was set, or vice versa.
parameters
elem
Object
Nested element
modName
String
Modifier name
modVal1
String
First modifier value, optional for boolean modifiers
modVal2
String
Second modifier value
condition
Boolean
Condition
delMod([elem], modName):BEMprotected
description
Removes a modifier from a block/nested element
parameters
elem
Object
Nested element
modName
String
Modifier name
getDefaultParams():Objectprotected
description
Returns a block's default parameters
nextTick(fn):BEMprotected
description
Executes given callback on next turn eventloop in block's context
parameters
fn
Function
callback

Static methods:

blocks()
description
Storage for block declarations (hash by block name)
decl(decl, decl.block|decl.name, [decl.baseBlock], [decl.baseMix], [decl.modName], [decl.modVal], [props], [staticProps]):Function
description
Declares blocks and creates a block class
parameters
decl
String, Object
Block name (simple syntax) or description
decl.block|decl.name
String
Block name
decl.baseBlock
String
Name of the parent block
decl.baseMix
Array
Mixed block names
decl.modName
String
Modifier name
decl.modVal
String, Array
Modifier value
props
Object
Methods
staticProps
Object
Static methods
create(block, [params]):BEM
description
Factory method for creating an instance of the block named
parameters
block
String, Object
Block name or description
params
Object
Block parameters
getName():String
description
Returns the name of the current block
on(e, [data], fn, [ctx]):Function
description
Adds an event handler
parameters
e
String, Object
Event type
data
Object
Additional data that the handler gets as e.data
fn
Function
Handler
ctx
Object
Handler context
un([e], [fn], [ctx]):Function
description
Removes event handler or handlers
parameters
e
String, Object
Event type
fn
Function
Handler
ctx
Object
Handler context

i-bem__collection

Augments:Array
Base class for collections. Create collection of similar objects.

Static methods:

getMethods():Array
description
Get method names that will be implemented in collection
getBase():Object
description
Get base prototype for collection
create(a):Object
description
Create collection instance
parameters
a
Array
list of similar objects

i-bem__dom

Base block for creating BEM blocks that have DOM representation

Instance methods:

findBlocksInside([elem], block):BEMDOM
description
Finds blocks inside the current block or its elements (including context)
parameters
elem
String, jQuery
Block element
block
String, Object
Name or description (block,modName,modVal) of the block to find
findBlockInside([elem], block):BEMDOM
description
Finds the first block inside the current block or its elements (including context)
parameters
elem
String, jQuery
Block element
block
String, Object
Name or description (block,modName,modVal) of the block to find
findBlocksOutside([elem], block):BEMDOM
description
Finds blocks outside the current block or its elements (including context)
parameters
elem
String, jQuery
Block element
block
String, Object
Name or description (block,modName,modVal) of the block to find
findBlockOutside([elem], block):BEMDOM
description
Finds the first block outside the current block or its elements (including context)
parameters
elem
String, jQuery
Block element
block
String, Object
Name or description (block,modName,modVal) of the block to find
findBlocksOn([elem], block):BEMDOM
description
Finds blocks on DOM elements of the current block or its elements
parameters
elem
String, jQuery
Block element
block
String, Object
Name or description (block,modName,modVal) of the block to find
findBlockOn([elem], block):BEMDOM
description
Finds the first block on DOM elements of the current block or its elements
parameters
elem
String, jQuery
Block element
block
String, Object
Name or description (block,modName,modVal) of the block to find
bindToDomElem(domElem, event, [data], fn):BEMDOMprotected
description
Adds an event handler for any DOM element
parameters
domElem
jQuery
DOM element where the event will be listened for
event
String, Object
Event name or event object
data
Object
Additional event data
fn
Function
Handler function, which will be executed in the block's context
bindToDoc(event, [data], fn):BEMDOMprotected
description
Adds an event handler to the document
parameters
event
String, Object
Event name or event object
data
Object
Additional event data
fn
Function
Handler function, which will be executed in the block's context
bindToWin(event, [data], fn):BEMDOMprotected
description
Adds an event handler to the window
parameters
event
String, Object
Event name or event object
data
Object
Additional event data
fn
Function
Handler function, which will be executed in the block's context
bindTo([elem], event, [data], fn):BEMDOMprotected
description
Adds an event handler to the block's main DOM elements or its nested elements
parameters
elem
jQuery, String
Element
event
String, Object
Event name or event object
data
Object
Additional event data
fn
Function
Handler function, which will be executed in the block's context
unbindFromDomElem(domElem, event, [fn]):BEMDOMprotected
description
Removes event handlers from any DOM element
parameters
domElem
jQuery
DOM element where the event was being listened for
event
String, Object
Event name or event object
fn
Function
Handler function
unbindFromDoc(event, [fn]):BEMDOMprotected
description
Removes event handler from document
parameters
event
String, Object
Event name or event object
fn
Function
Handler function
unbindFromWin(event, [fn]):BEMDOMprotected
description
Removes event handler from window
parameters
event
String, Object
Event name or event object
fn
Function
Handler function
unbindFrom([elem], event, [fn]):BEMDOMprotected
description
Removes event handlers from the block's main DOM elements or its nested elements
parameters
elem
jQuery, String
Nested element
event
String, Object
Event name or event object
fn
Function
Handler function
getMods([elem], [...modNames]):Object
description
Returns values of modifiers of the block/nested element
parameters
elem
Object
Nested element
...modNames
String
Modifier names
setMod([elem], modName, [modVal]):BEMDOM
description
Sets a modifier for a block/nested element
parameters
elem
jQuery
Nested element
modName
String
Modifier name
modVal
String, Boolean
Modifier value
findElem([ctx], names, [modName], [modVal], [strictMode]):jQuery
description
Finds elements nested in a block
parameters
ctx
jQuery
Element where search is being performed
names
String
Nested element name (or names separated by spaces)
modName
String
Modifier name
modVal
String
Modifier value
strictMode
Boolean
_filterFindElemResults(res):jQuery
description
Filters results of findElem helper execution in strict mode
parameters
res
jQuery
DOM elements
elem(names, [modName], [modVal]):jQuery
description
Lazy search for elements nested in a block (caches results)
parameters
names
String
Nested element name (or names separated by spaces)
modName
String
Modifier name
modVal
String, Boolean
Modifier value
closestElem(ctx, elemName):jQuery
description
Finds elements outside the context
parameters
ctx
jQuery
context
elemName
String
Element name
dropElemCache([names], [modName], [modVal]):BEMDOMprotected
description
Clearing the cache for elements
parameters
names
String
Nested element name (or names separated by spaces)
modName
String
Modifier name
modVal
String
Modifier value
elemParams(elem):Object
description
Retrieves parameters of a block element
parameters
elem
String, jQuery
Element
elemify(elem, elemName):jQuery
description
Elemify given element
parameters
elem
jQuery
Element
elemName
String
Name
containsDomElem([ctx], domElem):Booleanprotected
description
Checks whether a DOM element is in a block
parameters
ctx
jQuery
Element where check is being performed
domElem
jQuery
DOM element
buildSelector([elem], [modName], [modVal]):String
description
Builds a CSS selector corresponding to a block/element and modifier
parameters
elem
String
Element name
modName
String
Modifier name
modVal
String
Modifier value

Static methods:

scope()
description
Scope
doc()
description
Document shortcut
win()
description
Window shortcut
init([ctx]):jQuery
description
Initializes blocks on a fragment of the DOM tree
parameters
ctx
jQuery, String
Root DOM node
destruct(ctx, [excludeSelf])
description
Destroys blocks on a fragment of the DOM tree
parameters
ctx
jQuery
Root DOM node
excludeSelf
Boolean
Exclude the main domElem
detach(ctx, [excludeSelf])
description
Detaches blocks on a fragment of the DOM tree without destructing DOM tree
parameters
ctx
jQuery
Root DOM node
excludeSelf
Boolean
Exclude the main domElem
update(ctx, content):jQuery
description
Replaces a fragment of the DOM tree inside the context, destroying old blocks and intializing new ones
parameters
ctx
jQuery
Root DOM node
content
jQuery, String
New content
replace(ctx, content):jQuery
description
Changes a fragment of the DOM tree including the context and initializes blocks.
parameters
ctx
jQuery
Root DOM node
content
jQuery, String
Content to be added
append(ctx, content):jQuery
description
Adds a fragment of the DOM tree at the end of the context and initializes blocks
parameters
ctx
jQuery
Root DOM node
content
jQuery, String
Content to be added
prepend(ctx, content):jQuery
description
Adds a fragment of the DOM tree at the beginning of the context and initializes blocks
parameters
ctx
jQuery
Root DOM node
content
jQuery, String
Content to be added
before(ctx, content):jQuery
description
Adds a fragment of the DOM tree before the context and initializes blocks
parameters
ctx
jQuery
Contextual DOM node
content
jQuery, String
Content to be added
after(ctx, content):jQuery
description
Adds a fragment of the DOM tree after the context and initializes blocks
parameters
ctx
jQuery
Contextual DOM node
content
jQuery, String
Content to be added
liveInitOnEvent([elemName], event, [callback])protected
description
Helper for live initialization for an event on DOM elements of a block or its elements
parameters
elemName
String
Element name or names (separated by spaces)
event
String
Event name
callback
Function
Handler to call after successful initialization
liveBindTo([to], event, [callback])protected
description
Helper for subscribing to live events on DOM elements of a block or its elements
parameters
to
String, Object
Description (object with modName, modVal, elem) or name of the element or elements (space-separated)
event
String
Event name
callback
Function
Handler
liveUnbindFrom([elem], event, [callback])protected
description
Helper for unsubscribing from live events on DOM elements of a block or its elements
parameters
elem
String
Name of the element or elements (space-separated)
event
String
Event name
callback
Function
Handler
liveInitOnBlockEvent(event, blockName, callback)protected
description
Helper for live initialization for a different block's event on the current block's DOM element
parameters
event
String
Event name
blockName
String
Name of the block that should trigger a reaction when initialized
callback
Function
Handler to be called after successful initialization in the new block's context
liveInitOnBlockInsideEvent(event, blockName, [callback])protected
description
Helper for live initialization for a different block's event inside the current block
parameters
event
String
Event name
blockName
String
Name of the block that should trigger a reaction when initialized
callback
Function
Handler to be called after successful initialization in the new block's context
on([ctx], e, [data], fn, [fnCtx])
description
Adds a live event handler to a block, based on a specified element where the event will be listened for
parameters
ctx
jQuery
The element in which the event will be listened for
e
String
Event name
data
Object
Additional information that the handler gets as e.data
fn
Function
Handler
fnCtx
Object
Handler's context
un([ctx], e, [fn], [fnCtx])
description
Removes the live event handler from a block, based on a specified element where the event was being listened for
parameters
ctx
jQuery
The element in which the event was being listened for
e
String
Event name
fn
Function
Handler
fnCtx
Object
Handler context
buildClass([elem], [modName], [modVal]):String
description
Builds a CSS class corresponding to the block/element and modifier
parameters
elem
String
Element name
modName
String
Modifier name
modVal
String
Modifier value
buildSelector([elem], [modName], [modVal]):String
description
Builds a CSS selector corresponding to the block/element and modifier
parameters
elem
String
Element name
modName
String
Modifier name
modVal
String
Modifier value

i-bem__internal

Object methods:

buildClass(block, [elem], [modName], [modVal]):String
description
Builds the class of a block or element with a modifier
parameters
block
String
Block name
elem
String
Element name
modName
String
Modifier name
modVal
String, Number
Modifier value
buildClasses(block, [elem], [mods]):String
description
Builds full classes for a buffer or element with modifiers
parameters
block
String
Block name
elem
String
Element name
mods
Object
Modifiers

i-bem_elem-instances

Augments:BEM

Static methods:

decl(decl, decl.block, decl.elem, [decl.baseBlock], [decl.baseMix], [decl.modName], [decl.modVal], [props], [staticProps]):Functionprotected
description
Declares elements and creates an elements class
parameters
decl
Object
Element description
decl.block
String
Block name
decl.elem
String
Element name
decl.baseBlock
String
Name of the parent block
decl.baseMix
Array
Mixed block names
decl.modName
String
Modifier name
decl.modVal
String, Array
Modifier value
props
Object
Methods
staticProps
Object
Static methods
create(desc, [params]):BEM
description
Factory method for creating an instance of the element named
parameters
desc
Object
Description
params
Object
Instance parameters
getName([shortName]):Stringprotected
description
Returns the name of the current instance
parameters
shortName
Boolean
return the short name of the current instance

i-bem__collection_type_dom

Augments:i-bem__collection
Collection of BEM.DOM blocks. Implementation of BEM.DOM methods for array of blocks.

Static methods:

getMethods():Arrayoverride
description
Get methods that will be implemented in BEMDOMCollection

i-bem__dom_collection_yes

Augments:BEMDOM
Overrides BEM.DOM.findBlocks* methods that they return i-bem__collection_type_dom

i-bem__dom_elem-instances

Augments:BEMDOM

Instance methods:

getMod([elem], modName):Stringprotected
description
Delegates native getMod helper to element's instance
parameters
elem
jQuery
Nested element
modName
String
Modifier name
getMods([elem], [modName1]):Objectprotected
description
Delegates native getMods helper to element's instance
parameters
elem
jQuery
Nested element
modName1
String
..., modNameN] Modifier names
setMod([elem], modName, modVal):BEMprotected
description
Delegates native setMod helper to element's instances
parameters
elem
jQuery
Nested element
modName
String
Modifier name
modVal
String
Modifier value
block():BEMDOM
description
Returns and initializes (if necessary) the own block of current element
_filterFindElemResults(res):jQuery
description
Filters results of findElem helper execution in strict mode
parameters
res
jQuery
DOM elements
elemInstance(elem, [modName], [modVal]):BEMDOM
description
Lazy search (caches results) for the first instance of defined element and intializes it (if necessary)
parameters
elem
String, jQuery
Element
modName
String
Modifier name
modVal
String
Modifier value
elemInstances(elem, [modName], [modVal]):BEMDOM
description
Lazy search (caches results) for instances of defined elements and intializes it (if necessary)
parameters
elem
String, jQuery
Element
modName
String
Modifier name
modVal
String
Modifier value
findElemInstance([ctx], elem, [modName], [modVal], [strictMode]):BEMDOM
description
Finds the first instance of defined element and intializes it (if necessary)
parameters
ctx
jQuery
Element where search is being performed
elem
String, jQuery
Element
modName
String
Modifier name
modVal
String
Modifier value
strictMode
Boolean
findElemInstances([ctx], elem, [modName], [modVal], [strictMode]):BEMDOM
description
Finds instances of defined elements and intializes it (if necessary)
parameters
ctx
jQuery
Element where search is being performed
elem
String, jQuery
Element
modName
String
Modifier name
modVal
String
Modifier value
strictMode
Boolean
closestElem([ctx], elemName):jQuery
description
Finds elements outside the context or current element
parameters
ctx
jQuery
context (current element by default)
elemName
String
Element name
closestElemInstance([ctx], elemName):BEMDOM
description
Finds instance of defined element outside the context or current element
parameters
ctx
jQuery
context (current element by default)
elemName
String
Element name
closestElemInstances([ctx], elemName):BEMDOM
description
Finds instances of defined elements outside the context or current element
parameters
ctx
jQuery
context (current element by default)
elemName
String
Element name

Static methods:

decl(name, [props], [staticProps], [_autoDecl]):Functionprotected
description
Auto-declarator for elements
parameters
name
Object
Instance name
props
Object
Methods
staticProps
Object
Static methods
_autoDecl
Object
Auto-declaration flag
liveInitOnBlockEvent(event, [callback]):Functionprotected
description
Helper for live initialization for an own block's event
parameters
event
String
Event name
callback
Function
Handler to be called after successful initialization in the new element's context
buildClass([elem], [modName], [modVal]):String
description
Builds a CSS class corresponding to the block/element and modifier
parameters
elem
String
Element name
modName
String
Modifier name
modVal
String
Modifier value

i-bem__dom_init

Initializes blocks on a fragment of the DOM tree
parameters
ctx
jQuery
Root DOM node
returns
jQuery
ctx Initialization context