Open voischev opened 9 years ago
Плохой вариант:
$(BEMHTML.apply({
block : 'block',
mods : { foo : 'bar' },
content : {
elem : 'result'
}
})).find(this.buildSelector('result')).html();
Хороший вариант: сделать result
самостоятельным блоком, смиксованным с block__result
.
Кажется, что BEMHTML должен уметь делать что-то типа:
BEMHTML.with({block:'block', mods: {foo: 'bar'}}).apply...
Почему нельзя использовать elemMods
для элемента, а mods
только для блока?? Зачем оно на элемент прокидывается?
@voischev Я вообще не знаю зачем оно в bemjson. Для bemhtml — не знаю зачем в шаблоны пробрасывается. Не увидел убедительных доводов: https://github.com/bem/bem-method/issues/250
@voischev @zxqfox Похоже у вас разные точки зрения на этот счёт :)
@Guria сходимся в том, что все это неоднозначно и стоит причесать ;-)
Почему нельзя использовать elemMods для элемента, а mods только для блока?? Зачем оно на элемент прокидывается?
Историческая данность, которую надо починить, но при этом не сломать кому-нибудь, что-нибудь. При этом кейс возникает достаточно редко, чтобы про него постоянно все забывали.
Поведение уходит далеко в прошлое и базируется на идее «элемент у блока с модификатором невозможен». А раз block_mod_val__elem
невозможен, то можно немного с оптимизировать и схитрить.
Можно (в теории) обойти так:
apply({
block : 'block',
mods : { foo : 'bar' },
elemMods : {}, // NOTE `elemMods`
elem : 'result'
})
В bem-xjst@4.0.1
поведение совпадает:
BEMHTML.apply({ block: 'b1', elem: 'e1', elemMods: { m1: 'v1' } }); // '<div class="b1__e1 b1__e1_m1_v1"></div>'
BEMHTML.apply({ block: 'b1', elem: 'e1', mods: { m1: 'v1' } }); // '<div class="b1__e1 b1__e1_m1_v1"></div>'
И это замечательно!
@tadatuta плохо, может исправить, до bem-core@3.x?
@narqo завел https://github.com/bem/bem-xjst/issues/88
:+1:
Привет. Встретил такой кейс. Нужно от шаблонизировать элемент блока-с-модификатором в браузере
Шаблон
Элемент
result
хочется отшаблонизировать на клиентеРезультат
Все как нужно, но block__result_foo_bar Который совсем не нужен, который совсем не ожидаешь.
Почему так? Как поступать в таких случаях?