bem / bem-core

BEM Core Library
https://ru.bem.info/technologies/classic/i-bem/
Other
275 stars 94 forks source link

BEMHTML: Priority in mode attrs #730

Closed tenorok closed 8 years ago

tenorok commented 9 years ago

Right now attributes extends with priority of BEMJSON.

It so strange while js-parameters extends with priority of template.

I have trouble, when try override attribute in template. The example below.

BEMSJON:

{ block: 'example', attrs: { a: 1 }}

BEMHTML:

block example, attrs: { a: 2 }

Result:

<div class="example" a="1"></div>

Expected result:

<div class="example" a="2"></div>
tenorok commented 9 years ago

// cc @veged

veged commented 9 years ago

It's so long story (from the beginning of BEMHTML)... but I think now (considering to current pattern and best practices of BEMHTML templates usage) we can change that behaviour and make all extends consistent (priority of BEMHTML).

@mishanga let's think about it for synchronise with BH

qfox commented 9 years ago

@veged BH has force flag that allow you to override bemjson values afaik.

veged commented 9 years ago

@zxqfox i know, but it's not about flag but about priority of redefinition

@mishanga plz take a look

mishanga commented 9 years ago

Я +1 к автору issue. BH тут не при чем, там своя логика с force.

veged commented 9 years ago

речь про то, что сейчас в BEMHMTL и в BH одинаковый приоритет между шаблонами и входным BEMJSON:

{ block: 'example', attrs: { a: 1 }}

bh.match('example', function(ctx) {
    ctx.attr('a', '2');
});

даёт <div class="example" a="1"></div>, а хочется <div class="example" a="2"></div> и если это менять, то и в BH надо менять симметрично

mishanga commented 9 years ago

Не надо сравнивать одно с другим. В BH и BEMHTML совершенно разные механизмы заложены. Давайте говорить только про BEMHTML. Он должен быть сам по себе консистентным: если мода tag в шаблонах заруливает BEMJSON, то и с attrs должно быть так же.

veged commented 9 years ago

как же разные, если одни и те же по смыслу шаблоны работают одинаково? o_0

суть тикета в том, что я готов исправить это поведение на "консистентное" (в понимании большинства), но логично симметричное поведение иметь и в BH (в своё время ты же делал как раз разное поведение в BH для attrs и остальных)

mishanga commented 9 years ago

Разница в том, что BH модифицирует контекст, а BEMHTML — нет. После применения первого шаблона мы теряем информацию о том, каким было изначальное значение в BEMJSON. Тот факт, что сейчас шаблоны выглядят похожим образом и работают одинаково — чистое совпадение :) Как только появляется какая-то вложенность, эта иллюзия рушится. В attrs такое же поведение, как везде: return force ? extend(base, new) : extend(new, base).

veged commented 9 years ago

ну оок ;-) если ты говоришь, что ничего не надо, значит не надо

dfilatov commented 8 years ago

Let's move all discussion about BEMTREE and BEMHTML to https://github.com/bem/bem-xjst/issues