bem / bem-bl

Base BEM library
http://bem.github.com/bem-bl/
198 stars 84 forks source link

Do not add i-bem class to elem #532

Closed escaton closed 10 years ago

escaton commented 10 years ago

кейс такой: табличка с кучей элементов у которых есть js параметры и указан блок, потому что сверху — враппер и контекст не тот. Ставится i-bem и ощутимое время идет инициализация всех этих элементов.

tadatuta commented 10 years ago

я не уверен, что никто не рассчитывает на текущее поведение. например, для elem-instances.

// cc @veged

escaton commented 10 years ago

для такого bemjson

{
  elem: 'elem',
  js: 'test'
}

i-bem же не добавляется.

veged commented 10 years ago

для elem-instances вроде отдельно в mix указывали i-bem — в любом случае, аргумент про то, что сейчас для { elem: 'elem', js: true } не добавляется i-bem железный ;-) так что этот пуллреквест скорее нормализует текущее поведение

tadatuta commented 10 years ago

@escaton Егор, если я портирую в support/2.x, будет достаточно?

tadatuta commented 10 years ago

@veged, есть смысл портировать в bem-core@v2?

veged commented 10 years ago

да, стоит портировать в v2 — в v3 в этом месте будет много изменений

narqo commented 10 years ago

@tadatuta @veged разве это не сломает такой код:

BEM.DOM.decl('user__action', {
    // ...
});

Я не уверен, что все такие «странности» выпилили из islands* — как минимум нужно прошерстить все библиотеки в Лего

veged commented 10 years ago

этот user__action врядли в bemjson сейчас используется как { block: 'user', elem: 'action' } (практически всегда пишется { block: 'user', content: ...{ elem: 'action' }... }), поэтому я и говорю, что ничего не должно сломаться

denchistyakov commented 9 years ago

Такое есть как минимум в b-statcounter__metrika (( И, да, Вова прав, это его ломает, но примиксовывание руками помогает

tadatuta commented 9 years ago

@denchistyakov да, еще Директу от этого изменения досталось :( но с этим кодом вышла уже куча релизов мета-библиотеки, так что обратного пути нет.

qfox commented 9 years ago

А я все думал, что за дела и почему на js : truthy у элементов все равно приходится примиксовывать руками i-bem. ;-(

escaton commented 9 years ago

@zxqfox окей, а как задекларировать элемент с блоком, чтобы js параметры были на месте, но инициализацию блока звать не надо?

tadatuta commented 9 years ago

@zxqfox для твоего кейса есть лекарство:

elemMatch(function() { return this.ctx.js; }).mix()([].concat(applyNext(), { block: 'i-bem' }));
qfox commented 9 years ago

@escaton Никак. Проблема в архитектуре. Тут надо понимать, что в v2 появились elemInstances, которые, почему-то, руками примиксовывают i-bem (совсем не так, как js : true у блоков), и хорошо бы знать, что за элемент (от какого блока), что там за данные, почему они лежат именно на элементах, но с привязкой к блоку (если я правильно понял логику), и т.д. Я бы сказал — давайте везде одинаково. Если миксуем — то и у блоков миксуем.

Кроме этого, кстати, не так давно поднимался вопрос вообще отказаться от .i-bem в пользу [data-bem]. Как тогда будем чинить? Посредством ввода data-bem-elem?

@tadatuta Да, я пониманию. Но для bh, же, нет такого?

tadatuta commented 9 years ago

@zxqfox нормальное решение для elem-instances появится в bem-core@v3, текущее нужно воспринимать как экспериментальную отключенную по умолчанию фичу для тех, кто понимает, на что идет ;)

qfox commented 9 years ago

@tadatuta ну подожди, что значит нормальное решение? там не будет i-bem на элементах? или будет? тут вариантов-то не много. Либо есть инициализация элементов, либо её нет. Но с фичей — да, согласен, и все равно плохо, что для блоков — один способ автоинициализации, а для элементов — другой. К слову, я помню как я долго боролся и не мог понять, но нужно в onclick="return вставить названия блоков, но кроме этого еще и класс i-bem надо было прописать. Матерился. А перед новым годом меня двое коллег удивили — неочевидно, говорят, что по id в параметрах две дом-ноды в один блок склеиваются. ;-)