Хочу поинтересоваться на примере конкретной задачи. При потере фокуса у блока убирается модификатор. Нужно его оставить, если внутренний элемент блока не пустой. В документации я не нашёл методов для проверки на пустоту, а нашёл только вот это:
В контексте экземпляра блока и элемента с DOM-представлением зарезервировано поле this.domElem, содержащее jQuery-объект со ссылками на все DOM-узлы, с которыми связан данный экземпляр.
Благодаря этой информации я додумался сделать так (привожу часть кода):
modules.define('input', ['i-bem-dom'], function (provide, bemDom) {
provide(bemDom.declBlock(this.name, {
beforeSetMod: {
'focus': {
'': function () {
return !(this.domElem.find('.input__item').val());
}
}
}}));
});
Оно работает. Но почему-то у меня такое ощущение, что это можно сделать более элегантно, не хардкодить имя элемента.
Пробовал искать через findChildElem(elem);, но с результатом поиска у меня не получалось делать ничего, кроме манипуляций модификаторами. Как тогда наиболее правильно производить всё то множество операций, которое доступно в jQuery?
Вполне рабочий вариант, на мой взгляд. А проверка на незаполненость («пустоту»): https://ru.bem.info/platform/libs/bem-components/6.0.0/desktop/input/#jsdoc-getVal-1 , т. е.:
Точно, спасибо!