Open vokson opened 7 years ago
Код оформляется в markdown в точности как на github — три бектика и язык для подсветки кода (комментарий можно отредактировать).
Пока глубоко не вчитывался, но похоже, что проблема с шаблонами: вложенность в шаблонах на блоки не поддерживается.
Если необходимо выразить «Добавь микс к любому блоку input
внутри блока qa-form
», то это должно выглядеть примерно вот так:
block('qa-form')(
def()(function() {
return applyNext({ _inQaForm: true }); // выставляем флаг _inQaForm, который будет доступен из всех узлов внутри данного
}),
tag()('form'),
// ...
);
block('input').match(function() {
return this._inQaForm; // подпредикат, который проверяет, что флаг взведен
}).mix()({mods: { theme: 'islands', size: 'm' });
Но на самом деле я бы так не извращался и писал все это явно, а еще лучше — ввел бы слой с BEMTREE. Ну а если очень хочется сэкономить на повторении модификаторов, я бы скорее предложил написать универсальный шаблон на все контролы безотносительно контекста:
block('input').def()(function() {
var mods = this.mods;
if (!mods.theme) {
mods.theme = 'islands';
}
if (!mods.size) {
mods.size = 'm';
}
return applyNext();
});
Тогда тема и размер будут выставляться по умолчанию, но по-прежнему сохранится возможность задать кастомные значения.
Слава @miripiruni, историю про умолчания и «вложенные предикаты» стоит добавить в какой-нибудь FAQ — часто спрашивают.
Спасибо за помощь. Сделал по последнему варианту.
@tadatuta пример с applyNext({ _inQaForm: true })
огонь. Давай заведём issue на дополнение документации.
Добрый день, Не могу понять в чем дело. Наверное, какая-то глупая ошибка. Я пытаюсь примиксовать стили к input и select в блоке qa-form.
block('qa-form') ( js()(true),
);
В результате для input стили подключаются, а для select нет. Позже я понял, что внутри select есть блоки button и popup, для которых стили не подключаются. Если сделать так:
block('qa-form') ( js()(true),
);
То стили подключаются и для select, но он не работает (кнопка не нажимается). Видимо почему-то js не подключается.. P.S. Извините, не понял как здесь правильно вставлять код, чтобы все было красиво.