bem-core
bem-core copied to clipboard
Упрощённый синтаксис для declMod
Предлагаемый
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)
@veged @vithar @tadatuta @zxqfox что думаете на этот счёт?
В качестве переходного периода можно реализовать новую версию и сохранить старую (до мажора).
в принципе можно было б сделать и «паттерн матчинг» по типу аргументов и сделать оба варианта совместимыми, но я предложил бы подождать голосов «👍»
@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)
Давай тогда полностью: declMod('mod').declVal('val')...declProps(...)
Кстати, ты пробовал это сделать доопределением? Сильно удобнее стало? Кажется, что пользы будет не много.
@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
Так ты пробовал?
Пробовал. И потом с каждым новым модификатором начинал интуитивно так писать (вместо текущего стиля). Переводить проект не решился, т.к. это не мейнстрим, но в качестве идеи решил завести таску для обсуждения.
Использование префиксов вполне понятно до 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', ...)
.
Я не знаю, конечно, слишком мало экспертизы, но рискую предположить, что стоит выработать 1 (ОДНО, О Д Н О) решение для bem-core, bem-react-core, bem-xjst, etc. и везде им пользоваться.
@zxqfox в этом я тебя поддерживаю и обоими руками за :zap:
Всё конечно однородным не сделать, но максимально (где возможно) сблизить можно