Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.10.2015, 13:28
Аватар для vflash
Профессор
Отправить личное сообщение для vflash Посмотреть профиль Найти все сообщения от vflash
 
Регистрация: 09.07.2007
Сообщений: 304

Простой и быстрый генератор класса(html) в стиле BEM
Для формирования className на js в большинстве случаев использую обычное сложение строк.
var b = 'pe-input';

{
    class: (b + '__icon'
        + (isShowIcon ? ' -show' : '')
        + (minIcon ? '  ' + mixIcon : '')
    ),
}

в случаи сокращенных модификаторв этого подхода достаточно. Он прост, выглядит понятно, работает быстро. Но когда нужен полный модификатор немного неудобен.
var b = 'pe-input';

{
    class: (b + '__icon'
        + (isShowIcon ? '  ' + b + '__icon--show' : '')
        + (minIcon ? '  ' + mixIcon : '')
    ),
}

когда такой модификатор один или два это не сильно мешает. но когда больше и чаше в проекте, то раздражает.

Упростит эту ситуацию поможет простая функция. Задумал ее еще в прошлом году. Но долго думал "А стоит ли оно того", так как по производительности функция по шаблону будет медленнее.
Но решил всеже написать и вот что получилось
var mix = 'myForm__button';
var b = bem('myButton');

var x = b(); // myButton
var x = b('icon'); // myButton__icon
var x = b('icon', mix
    , 'x-glob-xxxx'
    , ['-open', true]
    , ['-size', 14]
    , {
        type: 'red',
        show: true
    }
);
// 'myButton__icon myButton__icon--type-red myButton__icon--show -size-14 -open x-glob-xxxx myForm__button'


Думаю по коду все сразу понятно как она работает. Но стоит обратить внимание что первое правило будет в конце генерированной строки. Это нужно что бы указывая миксы первыми, они оказывались в конце строки.

исходник тут https://github.com/vflash/bem-name
__________________
лучшая rss читалка zzreader.com

Последний раз редактировалось vflash, 17.10.2015 в 13:40.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск