bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

mix без block / elem #848

Open Guria opened 8 years ago

Guria commented 8 years ago

Не получается использовать mix, не указав block или elem:

block('header')(
  mix()([
    { block: 'row', mods: { 'sac': true }},
    { block: 'section' }
  ]),
  content()({
    mix: {
      block: 'row',
      elem: 'col',
      mods: { s: true }
    },
    content: [
      { elem: 'title' },
      { elem: 'intro' }
    ]
  })
)
<div class="header row row_sac section">
    <div>
        <div class="header__title"></div>
        <div class="header__intro"></div>
    </div>
</div>

Песочница С элементом Если указать миксуемый элемент прямой на этой ноде, то придётся явно указывать block у элементов в контенте.

Можно ли заставить работать первый вариант?

tadatuta commented 8 years ago

Мне идея нравится, но вроде мы когда-то это обсуждали с @veged и была какая-то причина учитывать миксы только для БЭМ-сущностей. Сейчас не вспомню аргументацию.

cc @miripiruni

voischev commented 8 years ago

Немного магии) :santa:

qfox commented 8 years ago

Надо добавлять elem: ':trollface:'

@Guria http://goo.gl/U92Rk8 — может как-то так?

Guria commented 8 years ago

@zxqfox да, похоже на правду

qfox commented 8 years ago

@Guria только там не то оборачивается ;-\

veged commented 8 years ago

я не понимаю, почему тикет называется «mix без block / elem», а в описании все примеры с указанием block/elem в mix?

вообще, должно быть можно писать mix : [{ mods : { m1 : 'v1' } }] и block/elem будет заполняться из контекста — пример

tadatuta commented 8 years ago

@veged Речь о том, чтобы

block('b1').content()(function() {
    return {
        mix: { block: 'b2' }, // этот микс отработал
        content: {
            elem: 'e1' // и при этом элемент принадлежал блоку b1
        }
    };
});

Сейчас сработает хак с cls вместо mix.

qfox commented 8 years ago

@veged Хочется без магии и попроще вот такие штуки делать: http://goo.gl/M1PCd8

Кстати, похоже на баг ;-(

Guria commented 8 years ago

@veged прогу прощения за заголовок. Хочется на дом ноде получить класс элемента другого блока, без перетирания текущего контекста. Думал использовать для этого микс, но он не срабатывает на bemjson ноде, на которой нету block или elem.

veged commented 8 years ago

пока всё что вы говорите выглядит как "won't fix"

tadatuta commented 8 years ago

@veged добавишь аргументацию для истории?

veged commented 8 years ago
  1. микс на объекте без block/elem не работает, т.к. считается, что это вообще не БЭМ-сущность
  2. в примере не понятно, что хочется упростить
  3. wrap + content (с элементами) это достаточно редкая конструкция — вполне можно уточнить block для всех элементов
  4. чтобы работала правильная относительность от контекста нужно прийти к чему-то типа this.elem('e1') вместо просто { elem : 'e1' }, а это всё усложнит и замедлит
tadatuta commented 8 years ago

А какие минусы у того, чтобы мочь применять микс для не БЭМ-сущности?

veged commented 8 years ago

начнутся другие проблемы-неконсистентности с тем как интерпретировать такой объект — с одной стороны он как-бы не БЭМ-сущность (т.е. не должен влиять на position, например), с другой там надо добавлять и data-bem если есть js в миксах и т.п. (т.е. в итоге выглядит как БЭМ-сущность)

Guria commented 8 years ago

@veged весомо, принято