В i-bem из bem-bl можно было передать в качестве параметра name
jQuery селектор. Сейчас по jsDoc можно передать только строку. Но, если всё-таки передать jQuery-селектор, например $tab = this.findElem('tab:eq(0)');
, то всё будет работать.
Но если попытаться дёрнуть this.setMod($tab, 'state', 'current');
, то мы получим неожиданный результат — <div class="tabs__tab tabs__tab:eq(0)_state_current">
.
Как минимум, стоит добавить в документацию, что использовать jQuery селектор в качестве параметра name
теперь нельзя.
Возможно, стоит сделать так, чтобы и this.findElem('tab:eq(0)');
не находил первый элемент tabs__tab
.
jQuery-селектор - это строка, разве нет? $tab - я так понимаю, уже не селектор содержит, а jQuery коллекцию?
Вот это даёт одну и ту же jQuery-коллекцию, но разный результат вызова
this.setMod($tab, 'state', 'current')
.Если считать, что jQuery-селектор строка, то
this.findElem('tab:eq(0)');
должен найти<div class="tabs__tab:eq(0)">
, а не первый<div class="tabs__tab">
.Короче, надо либо эскейпить строку, чтобы jquery не думал, что это селектор, иначе магия какая-то возникает. Либо магию обрабатывать, чтобы
<div class="tabs__tab tabs__tab:eq(0)_state_current">
не получалось.Звучит логично, надо только понять как лучше. /cc @tadatuta @dfilatov
там же никогда не было написано, что в качестве имени элемента можно использовать селектор... это случайно работало и случайно перестало работать — если мы напишем «{Sting} name имя элемента (только не передавайте селектор)», разве это будет выглядеть логично?
@veged да, копнул историю и проверил, что всегда по документации ожидалась только строка.
Но, тем не менее, странно, что
this.findElem('tab:eq(0)')
возвращает то, что он возвращает.согласен, странно (наверняка ещё есть места, где подобные вещи случайно будут работать из-за того что мы не параноим сильно с валидацией) — но мне кажется, что в данном случае вместо рантаймовой валидации параметра (замедление всего) и бросания ошибок вполне должна работать документация
Мне тоже так кажется ;-) И кажется, что правильно кажется)