Closed escaton closed 10 years ago
я не уверен, что никто не рассчитывает на текущее поведение. например, для elem-instances.
// cc @veged
для такого bemjson
{
elem: 'elem',
js: 'test'
}
i-bem же не добавляется.
для elem-instances
вроде отдельно в mix
указывали i-bem
— в любом случае, аргумент про то, что сейчас для { elem: 'elem', js: true }
не добавляется i-bem
железный ;-) так что этот пуллреквест скорее нормализует текущее поведение
@escaton Егор, если я портирую в support/2.x, будет достаточно?
@veged, есть смысл портировать в bem-core@v2
?
да, стоит портировать в v2 — в v3 в этом месте будет много изменений
@tadatuta @veged разве это не сломает такой код:
BEM.DOM.decl('user__action', {
// ...
});
Я не уверен, что все такие «странности» выпилили из islands*
— как минимум нужно прошерстить все библиотеки в Лего
этот user__action
врядли в bemjson сейчас используется как { block: 'user', elem: 'action' }
(практически всегда пишется { block: 'user', content: ...{ elem: 'action' }... }
), поэтому я и говорю, что ничего не должно сломаться
Такое есть как минимум в b-statcounter__metrika
((
И, да, Вова прав, это его ломает, но примиксовывание руками помогает
@denchistyakov да, еще Директу от этого изменения досталось :( но с этим кодом вышла уже куча релизов мета-библиотеки, так что обратного пути нет.
А я все думал, что за дела и почему на js : truthy
у элементов все равно приходится примиксовывать руками i-bem
. ;-(
@zxqfox окей, а как задекларировать элемент с блоком, чтобы js параметры были на месте, но инициализацию блока звать не надо?
@zxqfox для твоего кейса есть лекарство:
elemMatch(function() { return this.ctx.js; }).mix()([].concat(applyNext(), { block: 'i-bem' }));
@escaton Никак. Проблема в архитектуре. Тут надо понимать, что в v2 появились elemInstances
, которые, почему-то, руками примиксовывают i-bem (совсем не так, как js : true
у блоков), и хорошо бы знать, что за элемент (от какого блока), что там за данные, почему они лежат именно на элементах, но с привязкой к блоку (если я правильно понял логику), и т.д. Я бы сказал — давайте везде одинаково. Если миксуем — то и у блоков миксуем.
Кроме этого, кстати, не так давно поднимался вопрос вообще отказаться от .i-bem
в пользу [data-bem]
. Как тогда будем чинить? Посредством ввода data-bem-elem
?
@tadatuta Да, я пониманию. Но для bh, же, нет такого?
@zxqfox нормальное решение для elem-instances
появится в bem-core@v3
, текущее нужно воспринимать как экспериментальную отключенную по умолчанию фичу для тех, кто понимает, на что идет ;)
@tadatuta ну подожди, что значит нормальное решение? там не будет i-bem на элементах? или будет? тут вариантов-то не много. Либо есть инициализация элементов, либо её нет. Но с фичей — да, согласен, и все равно плохо, что для блоков — один способ автоинициализации, а для элементов — другой. К слову, я помню как я долго боролся и не мог понять, но нужно в onclick="return
вставить названия блоков, но кроме этого еще и класс i-bem надо было прописать. Матерился. А перед новым годом меня двое коллег удивили — неочевидно, говорят, что по id в параметрах две дом-ноды в один блок склеиваются. ;-)
кейс такой: табличка с кучей элементов у которых есть js параметры и указан блок, потому что сверху — враппер и контекст не тот. Ставится i-bem и ощутимое время идет инициализация всех этих элементов.