bem-core icon indicating copy to clipboard operation
bem-core copied to clipboard

Упрощённый синтаксис для declMod

Open belozer opened this issue 6 years ago • 11 comments

Предлагаемый

Imager.declMod('upload', props, staticProps)
Imager.declMod('upload', '*', props, staticProps)
Imager.declMod('upload', 'auto', props, staticProps)

Текущий

Imager.declMod({ modName : 'upload'  }, props, staticProps)
Imager.declMod({ modName : 'upload', modVal : '*' }, props, staticProps)
Imager.declMod({ modName : 'upload', modVal : 'auto' }, props, staticProps)

По аналогии с элементами

bemDom.declElem('block', 'elem', props, staticProps)

belozer avatar Apr 13 '18 00:04 belozer

@veged @vithar @tadatuta @zxqfox что думаете на этот счёт?

belozer avatar Apr 13 '18 00:04 belozer

В качестве переходного периода можно реализовать новую версию и сохранить старую (до мажора).

belozer avatar Apr 13 '18 00:04 belozer

в принципе можно было б сделать и «паттерн матчинг» по типу аргументов и сделать оба варианта совместимыми, но я предложил бы подождать голосов «👍»

veged avatar Apr 13 '18 18:04 veged

@veged а чем тебе не нравится вариант declMod(name, val, props, staticProps)? Вроде избавляет от излишнего префикса mod в декларации, но и также добавляет больше однородности в синтаксис decl*.

Хотя интересен ещё вариант из bem-react-core

Imager.declMod({ upload : true }, props, staticProps
Imager.declMod({ upload : '*' }, props, staticProps)
Imager.declMod({ upload : 'auto' }, props, staticProps)

belozer avatar Apr 14 '18 21:04 belozer

Давай тогда полностью: declMod('mod').declVal('val')...declProps(...)

Кстати, ты пробовал это сделать доопределением? Сильно удобнее стало? Кажется, что пользы будет не много.

qfox avatar Apr 16 '18 12:04 qfox

@zxqfox declMod это api BemEntity в bem-core-4 bem declBlock|declElem -> BemEntity

BemEntity declMod

https://github.com/bem/bem-core/blob/v4/common.blocks/i-bem/i-bem.vanilla.js#L438

Речь просто о синтаксисе, чтобы не дублировать постоянно mod

belozer avatar Apr 16 '18 13:04 belozer

Так ты пробовал?

qfox avatar Apr 19 '18 18:04 qfox

Пробовал. И потом с каждым новым модификатором начинал интуитивно так писать (вместо текущего стиля). Переводить проект не решился, т.к. это не мейнстрим, но в качестве идеи решил завести таску для обсуждения.

Использование префиксов вполне понятно до 4-й версии decl({ modName : 'mod', modName : 'val' }).

Но история с текущей декларацией не первый раз уже вызывает сомнения. declMod({ modName : 'mod', modName : 'val' }) из api и так понятно что мы декларируем модификатор. Зачем префиксы? Непонятна причина, по которой они остались.

На данный момент вижу 3 альтернативы как могли бы выглядеть декларации модификаторов:

declMod({ name : 'my-mod', val : 'val' }, ...) // просто без префикса
declMod('my-mod', 'val', ...) // по типу с декларациями элементов
declMod({ 'my-mod' : 'val' }, ...) // по типу bem-react-core

Самому нравится по типу элементов и в react стиле.

upd

Заменили ведь decl({ block : 'block', elem : 'elem' }, ...) на declElem('block', 'elem', ...).

belozer avatar Apr 19 '18 19:04 belozer

Я не знаю, конечно, слишком мало экспертизы, но рискую предположить, что стоит выработать 1 (ОДНО, О Д Н О) решение для bem-core, bem-react-core, bem-xjst, etc. и везде им пользоваться.

qfox avatar Apr 24 '18 22:04 qfox

@zxqfox в этом я тебя поддерживаю и обоими руками за :zap:

belozer avatar Apr 25 '18 12:04 belozer

Всё конечно однородным не сделать, но максимально (где возможно) сблизить можно

belozer avatar Apr 25 '18 12:04 belozer