Есть код в рамках модуля (не знаю, как обратиться в рамках БЭМ к хрефу, поэтому по старинке):
var
afishaLoc = '#afisha',
loc = window.location.hash;
if(loc == afishaLoc) {
$('a[href="' + afishaLoc + '"]').parent('li').click();
}
this.bindTo('item', 'click', function(e){
console.log('Click!');
}
Условие выполняется, но клик почему-то не происходит. li имеет класс block-name__item
Потому что подписка на клик происходит позже, чем собственно сам клик.
Но я интуитивно могу предположить, что задачу в принципе нужно решать не так. Так что если будут подробности могу помочь с более правильным вариантом.
И правда, что-то тупанул.
Ну здесь смысл такой: Есть меню, в котом один из пунктов при клике не ведет на другую страницу, а здесь же вызывает функцию из другого блока (появляется панель). Так же, при клике в урле должен проставиться hash, что бы урл можно было бы скопировать и кому-то отдать и если его откроют, то должна вызваться функция, которая происходит при клике на этот пункт меню.
Как-то так это сейчас работает, но боюсь это не совсем по БЭМовски, знаний по БЭМ фреймворку пока мало:
Предлагаю сделать проще:
activate
/deactivate
, использовать стандартную БЭМ-предметную область, т.е. выразить состояние панели через модификаторы. Это позмолит а) включать/выключать/переключать панель через стандартные setMod/delMod/toggleMod + прописать реакцию на изменение этих модификаторов декларативно (как раз в качестве этой реакции и менять хеш) + бонусом будет возможность подписаться на событие переключения панели снаружи, если потребуется.menu-list
не придется перебирать айтемы через$('a[href="' + afishaLoc + '"]').parent('li')
, а реакция на клик будет всего лишь тоглить модификатор наside-panel
.Как сматчить елемент по модификатору? К примеру, мне нужно у элемента блока, у которого стоит модификатор с определенным значением дернуть href внутренней ссылки, а потом на этот элемент повесить модификатор:
В jQuery, это примерно так работает, а вот как по бэму, не понятно:
Чтобы найти элемент с нужным модификатором, можно использовать кеширующий
elem()
(https://ru.bem.info/libs/bem-core/v2.8.0/desktop/i-bem/jsdoc/#jsdoc-elem-1) или некеширующийfindElem()
— https://ru.bem.info/libs/bem-core/v2.8.0/desktop/i-bem/jsdoc/#jsdoc-findElem-1Код на jQuery можно переписать в терминах i-bem.js так:
Вот, это то что нужно было, теперь понял, спасибо
Правда если сделать клик удаленно
this.elem('item', 'toggle', 'on').click()
тоhrefLink = link.attr('href')
возвращает undefinedИ сразу в догонку вопрос, как реализовать это по бэмовски, учитывая структуру, которую писал выше, когда только у одного итема переключается модификатор тоггл и при этом клик происходит не по итему с модификатором toggle?
Тут возникает подозрение, что задачу нужно в принципе решать чуть по-другому. Расскажи про нее в более высокоуровневых терминах, попробую помочь с решением.
А задачу про тоггл, если, конечно, я ее правильно понял, нужно решать на уровне блока, тогда это выглядит как: