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?
А это он и есть