On Github sameoldmadness / bem-flux-slides
EkbJS 2. 2015-09-04
Роман Парадеев
разработчик, Яндекс
Блок — независимый компонент страницы
Элемент — составная часть блока
Элемент — составная часть блока
Элемент — составная часть блока
Модификатор задаёт особые свойства
<button class="button button_theme_action button_size_m wizard-phone2__action wizard-phone2__action_type_confirm-phone i-bem button_js_inited" type="button" role="button" onclick="return {"button":{}}"><span class="button__text">Подтвердить</span></button>
bh.apply({ block: 'button', mods: { theme: 'action', size: 'm' }, content: 'Подтвердить' })
фреймворк для управления блоками
button.setMod('pressed', 'yes')
button.elem('text')
button.on('change', fn)
button.setText('Нажми меня!')
button.findBlockOutside('form').submit(); form.findBlockInside('button').on('click', cb);
$button.parent('.form').submit(); $form.find('.button').on('click', cb);
button.on('click', function () { BEM.channel('form').trigger('submit'); }) BEM.channel('form').on('submit', function () { // реагируем на событие })
$button.on('click', function () { $('body').trigger('form.submit'); }) $('body').on('form.submit', function () { // реагируем на событие })
Как сделать систему понятной,не увеличивая связность блоков?
the good parts
Блок не должен знать о том, что происходит снаружи.
вниз — вызов API блока
form.findBlockInside('phone').setVal('223-322')
вверх — подписка на события
form.findBlockInside('phone').on('change', fn);
Не все блоки могут знать о других блоках
form.findBlockInside('summary').calc(); summary.findBlockInside('phone').submit(); phone.findBlockInside('input').setVal('223-322');
form.findBlockInside('summary').calc(); form.findBlockInside('phone').submit(); form.findBlockInside('input').setVal('223-322');
form.findBlockInside('summary').calc(); summary.findBlockInside('phone').submit(); phone.findBlockInside('input').setVal('223-322');
form.findBlockInside('summary').calc(); form.findBlockInside('phone').submit(); form.findBlockInside('input').setVal('223-322');
Данные должны храниться в особых блоках
userStore.register(header); userStore.register(form); userStore.set('name', 'Роман Парадеев'); userStore.emitChange();
Ну что там,когда уже про Flux?
А это он и есть