Size: a a a

2018 October 04

Р

Роман in БЭМ
Может что-то типа такого?
источник

И

Ильдар in БЭМ
Sergey Berezhnoy
а в чём проблема — если это было событие от С, то там будет правильный таргет
Подскажите, а как Б его должно  вверх к А прокинуть?

А же слушает например так
this._events(Б).on('click', this._prototype._onClick)
источник

Р

Роман in БЭМ
Роман
Может что-то типа такого?
Только
_domEvents() → _events()
источник
2018 October 05

SB

Sergey Belozyorcev in БЭМ
Alexey Krainov
Нужно именно при закрытие , что бы с body снимался класс
Есть несколько способов.

1. Вешать на body какой-то блок, который будет один на странице (например app). Вешать событие на закрытие модалки в нужном блоке.

this._events(modal).on({ modName : 'visible', modVal : '' }, () => {
  App.getInstance().enableScrolls();
});


2. Делать поиск боди или Page
this._events(modal).on({ modName : 'visible', modVal : '' }, () => {
  this.findParentBlock(Page).enableScrolls();
});


3. Использовать bemDom.scope (правда не знаю на сколько это корректно)
this._events(modal).on({ modName : 'visible', modVal : '' }, () => {
  bemDom.scope; // Это по-умолчанию jQuery body
});


4. Использовать размазывание блока.
Часть блока вешать на body и работать с ней как с элементом блока. https://ru.bem.info/platform/i-bem/html-binding/#Один-js-блок-на-нескольких-html-элементах


Можно юзать ещё каналы (это будет сравнимо с первым вариантом). Но я их стараюсь избегать....
источник

SB

Sergey Belozyorcev in БЭМ
Ильдар
Подскажите, а как Б его должно  вверх к А прокинуть?

А же слушает например так
this._events(Б).on('click', this._prototype._onClick)
Блок A должен знать только о блоке B. Пытаться извлечь что-то из блока лежащего внутри блока B не есть хорошая идея, как по мне. Хоть БЭМ и подразумевает, что родитель знает о дочерних блоках, но это усложняет взаимосвязи.

Сегодня у C одно api, а завтра другое. В следствии чего нужно будет править api в блоках A1, A2, A3 и т.д.
Лучше сделать у блока B нужный метод и дёргать его для получениях данных. Тогда если блок C заменится на блок C1,  больше шансов, что ничего не сломается.

Конечно всё зависит от разных вариаций вёрски. Если блок B является просто вспомогательным блоком (modal/popup) тогда в поиске блока C нет проблем.

На крайний случай можно использовать в блоке B такой кейс.

_onBlockCClick (e) {
   this._emit('click', { bemTarget :  e.bemTarget });
}

_onBlockBClick (e, data) {
   // Получаем данные из блока C
   data.bemTarget.getVal();
}


Нужно больше подробностей по задаче. Тогда будет меньше воды
источник

И

Ильдар in БЭМ
Sergey Belozyorcev
Блок A должен знать только о блоке B. Пытаться извлечь что-то из блока лежащего внутри блока B не есть хорошая идея, как по мне. Хоть БЭМ и подразумевает, что родитель знает о дочерних блоках, но это усложняет взаимосвязи.

Сегодня у C одно api, а завтра другое. В следствии чего нужно будет править api в блоках A1, A2, A3 и т.д.
Лучше сделать у блока B нужный метод и дёргать его для получениях данных. Тогда если блок C заменится на блок C1,  больше шансов, что ничего не сломается.

Конечно всё зависит от разных вариаций вёрски. Если блок B является просто вспомогательным блоком (modal/popup) тогда в поиске блока C нет проблем.

На крайний случай можно использовать в блоке B такой кейс.

_onBlockCClick (e) {
   this._emit('click', { bemTarget :  e.bemTarget });
}

_onBlockBClick (e, data) {
   // Получаем данные из блока C
   data.bemTarget.getVal();
}


Нужно больше подробностей по задаче. Тогда будет меньше воды
Я все делаю как вы описали, спасибо большое
источник

AK

Alexey Krainov in БЭМ
Sergey Belozyorcev
Есть несколько способов.

1. Вешать на body какой-то блок, который будет один на странице (например app). Вешать событие на закрытие модалки в нужном блоке.

this._events(modal).on({ modName : 'visible', modVal : '' }, () => {
  App.getInstance().enableScrolls();
});


2. Делать поиск боди или Page
this._events(modal).on({ modName : 'visible', modVal : '' }, () => {
  this.findParentBlock(Page).enableScrolls();
});


3. Использовать bemDom.scope (правда не знаю на сколько это корректно)
this._events(modal).on({ modName : 'visible', modVal : '' }, () => {
  bemDom.scope; // Это по-умолчанию jQuery body
});


4. Использовать размазывание блока.
Часть блока вешать на body и работать с ней как с элементом блока. https://ru.bem.info/platform/i-bem/html-binding/#Один-js-блок-на-нескольких-html-элементах


Можно юзать ещё каналы (это будет сравнимо с первым вариантом). Но я их стараюсь избегать....
источник
2018 October 08

И

Ильдар in БЭМ
Зачем был придуман bemtree если bemhtml и так со всем справляется?
источник

SB

Sergey Belozyorcev in БЭМ
Ильдар
Зачем был придуман bemtree если bemhtml и так со всем справляется?
bemhtml на выходе отдаёт html. bemtree json/объект, над которым можно спокойно поиграться. В частности через bemhtml
источник

SB

Sergey Belozyorcev in БЭМ
Ильдар
Зачем был придуман bemtree если bemhtml и так со всем справляется?
Вначале был bemhtml, а потом появлися bemtree
источник

И

Ильдар in БЭМ
Sergey Belozyorcev
bemhtml на выходе отдаёт html. bemtree json/объект, над которым можно спокойно поиграться. В частности через bemhtml
спасибо!
источник

SB

Sergey Belozyorcev in БЭМ
Ильдар
спасибо!
У нас на проекте практически все шаблоны на bemtree. bemhtml у нас чисто для тегов, аттрибутов и другой мешуры.
источник

SB

Sergey Belozyorcev in БЭМ
Ильдар
Зачем был придуман bemtree если bemhtml и так со всем справляется?
А так да. Можно обойтись и чисто bemhtml.
источник

И

Ильдар in БЭМ
Sergey Belozyorcev
А так да. Можно обойтись и чисто bemhtml.
а для каких целей можно использовать bemtree?
источник

SB

Sergey Belozyorcev in БЭМ
Ильдар
а для каких целей можно использовать bemtree?
У нас это 90% вёрстки ) Вся структура блоков в нём описывается
источник

И

Ильдар in БЭМ
Sergey Belozyorcev
У нас это 90% вёрстки ) Вся структура блоков в нём описывается
я просто не понимаю зачем он нужен если на bemhtml я делаю тоже самое. Хочется разобраться
источник

И

Ильдар in БЭМ
Sergey Belozyorcev
У нас это 90% вёрстки ) Вся структура блоков в нём описывается
верстку и на bemhtml можно делать
источник

SB

Sergey Belozyorcev in БЭМ
https://github.com/bem/project-stub/issues/159

Так вот ещё на тему обсуждений bemtree и bemhtml.
источник

SB

Sergey Belozyorcev in БЭМ
Ильдар
верстку и на bemhtml можно делать
Я не говорил что нельзя. bemhtml отдаёт конечный "продукт" в виде строки html. Bemtree отдаёт объект над которым можно поработать ещё.
источник

И

Ильдар in БЭМ
Sergey Belozyorcev
Я не говорил что нельзя. bemhtml отдаёт конечный "продукт" в виде строки html. Bemtree отдаёт объект над которым можно поработать ещё.
Пример приведите пожалуйста того что можно сделать с этими данными от bemtree, кейс если можно
источник