Необходимо назначить модификатор блоку menu, вложенному select (нужен код на экземпляре блока, связанный с модификатором). Пробую так:
block('select').mod('nicescroll', true)(
    block('menu')(
        addMods()(function(){
            return {
                nicescroll : true,
            };
        })
    ),
    // ...
Эффект нулевой.
Как?????????????
UPD: Ага. В bem-components так:
block('select').elem('menu')(
    replace()(function() {
        // ...
Т.е., наверное, могу ловить elem('menu') как-то. Щас попробую.
UPD-UPD: Ничего не придумал, кроме:
    block('select').mod('nicescroll', true).elem('menu').replace()(function(){
        var ctx = applyNext();
        ctx = ctx.replace(/\b(class="menu)\b/, '$1 menu_nicescroll');
        return ctx;
    }),
Но ведь это же неправильно!!!
Нет возможности перехватывать определение block('select').mod('nicescroll', true).block('menu') до рендеринга?
BEMHTML не поддерживает «вложенные» селекторы.
Селекторы в BEMHTML работают точно так же, как множественные селекторы в CSS. А скобки — это такой же «синтаксический сахар», как нестинг в CSS-препроцессорах.
Т.е.
block('select').mod('nicescroll', true)(block('menu'))— это то же самое, чтоblock('select').mod('nicescroll', true).block('menu')и по сути является полным аналогом.select.select_nicescroll.menu(а не.select.select_nicescroll. menu).Пример того, как решить исходную задачу, разбирали здесь: https://ru.bem.info/forum/1371/#comment-311956446
@tadatuta Да, спасибо. Способ тоже не оч. красивый, но по сравнению с тем трешем, что пришлось устраивать -- вершина элегантности. Переделал, стало гораздо чище. Выдохнул.
(Из-за крайне частых конструкций типа
block('b').elem('e')иногда начинает казаться, что предикаты таки всё же иногда изображают вложенность.%)))