Всем привет! Начал разбираться с i-bem.js и возникли некоторые вопросы. В качестве тестового примера взял статью на вашем форуме https://ru.bem.info/tutorials/quick-start-static/
Создал блок с произвольным названием taskmanager, здесь код BEMJSON-блока taskmanager https://github.com/Sergei-b84/test/blob/master/1.bemjson Динамическую функциональность данного блока описал в taskmanager.js файле https://github.com/Sergei-b84/test/blob/master/taskmanager.js Файловое размещение стандартное, поэтому описывать его не стал. В общем все отработало хорошо.
Теперь я хочу усложнить структуру моего блока taskmanager и сделать ее такой https://github.com/Sergei-b84/test/blob/master/2.bemjson А вот как переписать мой taskmanager.js файл не знаю. Помогите пожалуйста. Как искать элементы, если появились вложенные дополнительные блоки, как описать эти блоки? Жду ответа. Спасибо.
Привет!
Есть несколько вариантов: 1) Превратить новые блоки в элементы (вместо
taskmanager-header
сделатьtaskmanager__header
и аналогично дляtaskmanager-body'
). Тогда прежный JS продолжить работать вообще без изменений. 2) Примиксовать к тем сущностям, к которым требуется доступ из блокаtaskmanager
его элементы и обращаться к ним. В BEMJSON это может быть представлено как:Тогда из JS блока
taskmanager
добраться до API инпута можно черезthis.findBlockInside(this.elem('input'), 'input'); // первый опциональный аргумент задает контекст поиска
3) При отправке формы в
taskmanager-body
генерировать событие (this.emit('submit', newValue)
) и подписываться на него изtaskmanager
:4) Реализовать связь между блоками с помощью https://ru.bem.info/libs/bem-core/v2/desktop/events/
5) (Плохой вариант) Искать нужные блоки с помощью цепочек
findBlockInside()
.Спасибо за ответ. Пытаюсь разобраться по предложенному Вами третьему варианту. Сделал следующее: taskmanager.js
https://github.com/Sergei-b84/test/blob/master/taskmanager.js
и taskmanager-body.js
https://github.com/Sergei-b84/test/blob/master/taskmanager-body.js
Но пока не работает (т.е. контент элемента greeting остается без изменения. ) Может у меня где-то ошибка?
P.S. Как здесь (на форуме) оформлять код? Пробовал вставлять напрямую, через
@Sergei-b84 здесь работает markdown в точности как на github.
Спасибо. Кстати в адресной строке браузера после отправки каких-то данных, они отображаются : 8080/desktop.bundles/index/index.html?task=тест+привет&select1=Courses&select2=Германия , а в самом элементе не заменяются. В чем моя ошибка?
Предположу, что это из-за ошибки в коде просто не отрабатывает
preventDefault()
и форма отправляется.Спасибо за ответы. Но что-то все-равно не работает. Сделал как Вы порекомендовали. также нашел Ваши ответы на похожую тему https://github.com/bem/bem-forum-content-ru/issues/393
Делал как там, все равно что-то не так. Привожу свой код на данный момент. Может у меня где ошибка?
index.bemjson.js
taskmanager.js
taskmanager-body.js
taskmanager.bemhtml
taskmanager-body.bemhtml
Вот такие изменения решают проблему:
Спасибо большое за помощь, все заработало!!!