Попробовав project-stub, теперь не могу слезть с него. Думаю над проектом уже в виде блоков, элементов, модификаторов и тд. Нужен сервис, бэкенд которого работает только с базой данных. Принимает и отдает в json. Работает на php. Это есть. Но фронтенд должен отвечать за весь функционал, routing, запросы через http request к серверу. Ну вы поняли. Здесь мне нравится angular 2 со встроенным роутингом. Что на счёт bem? Есть решения? Сделав часть проекта на ангуляре втором, понимаешь что не хватает БЭМ(((
Есть https://ru.bem.info/libs/bem-history/v3.1.0/ про работу с History API.
Роутинг с БЭМом никак не связан, поэтому подойдет буквально совершенно любая существующая библиотека. Аналогично и про запросы к серверу — можно хоть
$.ajax()
использовать :)@cyberS7 Можете попробовать мой bnsf, если у вас SPA. Там есть и роутинг и запросы через http request к серверу.
На самом деле хотелось бы накидать блоков, описать bemjson. Что то вроде ангуляра, где я могу накидать компонентов, собрать их в app.component.ts и при заходе на сайт он сам все там собирает, компоненты делают запросы на сервер для получения данных из базы и я вообще не лезу и не вижу этот долбанный html. Сервер на php.
Я понял, чем не устраивает project-stub: нет ничего про роутинг из коробки.
Чем конкретно не устраивает bnsf - не понял. Вы "накидываете блоки", описываете, как формировать bemjson из данных, которые вам сервер в json отдаёт, с помощью bemtree. Блоки делают запросы на сервер для получения данных из базы. Вроде всё, как вы описываете.
В общем решил поднять вопрос :)
В моём представлении моя реализация пока сыро выглядит. Только абстрактно, что некий блок routing слушает события (о нажатии на ссылку например) -> делает запросы к api сервера -> отправляет данные в page (или другой блок) -> дальше отображение на странице
Мне рассказать про роутинг в bnsf, или и так всё понятно?
@apsavin - если будет не сложно. Просто посмотрел его код, там куски node.js (express) в перемешку с browser.js. Не совсем понял что мне нужно тянуть в свой проект, который не на экспрессе.
Нет, там не express, там только connect, но и его при желании можно выпилить.
В свой проект вытянуть что-то будет, боюсь, не очень просто.
Если вкратце, то:
За данными в api каждая страница ходит сама - используется асинхронная версия bemtree.
Например, пользователь кликнул по ссылке с урлом
/some/path/123
, а в роутинге есть роутpage-xxx
с путём/some/path/{id}
.request-listener
услышит click и бросит событиеrequest
,app-kernel
возьмёт страницу (читай блок)page-xxx
, отрендерит и отобразит в браузере.Схема не идеальна, есть минусы, но, в принципе, работает на ряде проектов в продакшене.
@apsavin, что значит асинхронная версия bemtree? В чём отличие?
Шаблонизатор bemtree начал работать синхронно совсем недавно. Большую часть своего существования он отрабатывал асинхронно. Это было сделано для того, чтобы прямо из шаблонизатора можно было отправлять запросы за данными.
Вот пример такого шаблона. В нём используется добавленный мной метод
get
, который принимает id роута и коллбэк, в который будут переданы данные после получения их от API.BEMTREE.apply(...)
возвращает promise в этой версии bemtree.