Всем привет.
Попробовал использовать библиотеку bem-forms в проекте на базе bnsf.
Однако, при изменении значений в полях ввода ни у блока form-field
, ни у блока input
, ни у блока message
не появляется модификатора invalid
. Да и вообще, судя по всему, блок validation
не инициализируется.
Я только начинаю изучать БЭМ, поэтому у меня есть подозрение, что ошибка скорее в моем коде, нежели в bem-forms или bnsf.
В связи с этим у меня есть несколько вопросов.
- В какой стадии разработки находится библиотека bem-forms?
- Если библиотека bem-forms готова для практического использования, где я мог ошибиться?
- Есть ли какой-нибудь инструментарий для инспектирования в браузере состояния блоков, не имеющих DOM-представления?
Спасибо!
BEMTREE-шаблон страницы с формой: https://github.com/narkq/bnsf-form-example/blob/4900760f8d797cc7a4df950f73043fcfcbaf779f/desktop.blocks/page-registration-step1/page-registration-step1.bemtree#L38-L71
@narkq К сожалению, пока нет документации, проект находится в стадии разработки, но существуенных изменений уже не будет.
По проблеме — validation не должен инициализироваться, это библиотека с небольшим набором проверщиков.
В коде выше вы получаете сам объект блока формы, и явно просите его провериться. Это же должно происходить при сабмите формы. Если этого не происходит — значит что-то идет не так ;-)
На своем уровне вы можете доопределить js формы, в метод _onSubmit должен прилетать сабмит формы, и там же можно сделать prevent, если есть какие-то ошибки в библиотеке.
p.s. Из больших изменений — вместо синхронного
{Boolean} validate
мы хотим асинхронный{Promise} checkValidity()
, при чем как у формы, так и у полей.@zxqfox оу, зачем вам асинхронная валидация форм по дефолту?
@zxqfox Спасибо, теперь стало понятно.
Правда, при вызове
$('form').bem('form').validate()
кидает ошибкуTypeError: this.getControl is not a function
вот здесь https://github.com/bem/bem-forms/blob/4aa34f8f8c995b7ac409563f3b8b203ad9295717/common.blocks/form-field/_has-validate/form-field_has-validate.browser.js#L60@apsavin Вы таки не любите промисы? ;-) Это пока POC.
@zxqfox я не люблю асинхронность там, где в ней нет нужды.) Для 99% кейсов проверки формы на валидность асинхронность не нужна.
@apsavin все так ;-)
@narkq https://github.com/bem/bem-forms/blob/master/common.blocks/form-field/_type/form-field_type.browser.js#L31
Ищет form-field__control, не может найти. Сейчас каждый form-field должен иметь модификатор type обязательно. Иначе все ломается ;-)
@zxqfox вы бы в таком случае проверяли наличие модификатора при инициализации, если модификатора нет - кидали бы ошибку с говорящим мессаджем.
@apsavin было бы круто увидеть пару issue от community ;-)
Оказывается, всего-навсего забыл добавить модификатор type в deps-файл :(
@narkq :+1: Спасибо!