Привет ! Подскажите пожалуйста, в методологии есть возможность создать layout как в Jade , подключать все скрипты в теге head и для других страниц.
Привет ! Подскажите пожалуйста, в методологии есть возможность создать layout как в Jade , подключать все скрипты в теге head и для других страниц.
В методологии возможно всё. Было бы понятнее если бы вы уточнили какие инструменты вас интересуют и что именно вы хотите в итоге получить.
Смотрите:
Мне эти скрпиты нужны не только на индексной страницы , но и на других. Если я буду описывать все это в бэм json то придется и в индексной их подключить и тоже самое написать на другой страницы. Я хочу узнать , можно ли подключить один раз, но чтобы видели все страницы эти скрипты. В jade я делал просто инклуд и все. Если мне понадобится подключить jquery , а страниц у меня 15, я же не буду всем 15 станица впиливать в тег head одну и ту же строчку подключения.
@Rahnar Мы у себя решили вынести в отдельную пачку (уровень) специальные блоки типа какой-то-layout. Можете тоже сделать у себя уровень, если собираете стандартными средствами, либо префикс 'l-'. Вариантов много, как уже отметил @Guria.
@Rahnar в случае jquery — вам не нужно подключать его самому в bemjson, достаточно описать его зависимостями только у тех блоков, которые им используются.
Один из вариантов, это доопределённый блок page на уровне проекта, что-то типа:
В нём же можно описать стандартный лейаут приложения или использовать лейаут реализованный отдельным блоком. Кстати
page
изbem-core
, по-умолчанию, тянет за собойi-bem
иjquery
.@Guria :+1:
А в виде
Ну и еще + deps.js с используемыми блоками — не потянет?
Мне кажется потянет, ведь блок
page
ты в свой deps пропишешь. Не потянет, только если в noDeps указать что именно тянуть не надо. По крайней мере я так делал. Если я не прав меня поправят.Спасибо за ответы! Буду пробовать. Я только начал его изучать и многое еще не понятно. И вот последний вопрос. Где можно посмотреть пример, как создавать другие страницы в БЭМ. Если например в desktop.bundles лежит папка index и там наш index.bemjson , то я захочу создать страницу контакты , мне надо будет создавать папку в desktop.bundles с названием contact или в папке index создать файл contact.bemjson?
Надо будет создавать папку в desktop.bundles с названием contact и файлом contact.bemjson. Имейте ввиду, что
bem-stub
это не сервер для сайта, а "станок веб-разработчика". Как именно собирать результаты и потом отдавать в браузер вам необходимо решить самому.bem-stub
эту задачу не решает.Как наиболее простое решение через express — можно попробовать express-bem с нужными плагинами ;-)
Либо руками, как завещал @tadatuta : https://github.com/bem/project-stub/commit/fc9fb31f0f3cdc1c321bbf72562e30c7edd1b4f5
@zxqfox Допили нам функциональность у express-bem )))
@voischev Issues are welcome, PRs are even more welcome!
если понимать правильно, то кучу страшных файлов мне надо будет написать самому? Как в папке index, где лежит не только index.bemjson а так же кучу других файлов с именем индекс, только для файла с именем contact.
Нет, эта куча страшных файлов в большинстве своём промежуточные результаты сборки.
@Rahnar все эти файлы генерируются из описания страницы (
*.bemjson.js
) или списка блоков (*.bemdecl.js
) и вашей библиотеки блоков, писать нужно только файлы в самих блоках (шаблоны, стили, ...) и эти входные файлы для страниц (bemjson.js
) или бандлов (bemdecl.js
).Этот фрагмент уловил. Но , до сих пор не понял , что и где прописать чтобы моя папка contact , с файлом contact.bemjson могла функционировать как и index.bemjson. Тобишь , чтобы я мог описывать все и видеть результат в браузере.
Файл должен называться desktop.bundles/concact/contact.bemjson.js. Сейчас так? enb, насколько я знаю, ругается при сборке, если не может найти этот файл (впрочем, как и на пустые папки в bundles).
Если у вас enb и он не ругается — то, видимо, нужно править конфиг сборки (
.enb/make.js
). Что-то там с ним не так.Да это я понял изначально. Вы просто так сказали , что помимо простого создания цепочки "desktop.bundles/concact/contact.bemjson.js." , нужно еще какой-то танец с бубном сделать, чтобы это все заработало. Я про это ("собирать результаты и потом отдавать в браузер вам необходимо решить самому"). Я может что-то не так понял. Но если на этом все , то спасибо большое за разъяснение.
Тут имеется ввиду, что если вам нужна не просто статика (html, css, js), то надо будет после сборки и бандлов их заполнять динамическими данными из базы или еще откуда-то, и это загрузка этих бандлов руками — танец с бубном ;) Если это нужно — я бы предложил https://github.com/bem/bem-forum-content-ru/issues/195#issuecomment-72643966
Просто смотреть на результат сборки можно без танцев с бубном, но если нужен production вариант, то надо понимать что и где публиковать. Просто статику за nginx положить или сайт в какой то мере динамический делать.
Безусловно , нужна динамика. К примеру вот: на шаблонизаторе jade , чтобы не плодить кучу тэгов li с какой-то информацией, я заношу весь контент тэгов li в файл json и потом, тупо подгружаю спец директивой jade , которая мне создает сама эти тэги li и вносит туда нужную информацию из json файла.
Для начала вам стоит понять принципиальные отличия шаблонизаторов
BEMHTML
/BH
отjade
и прочихmustache
.Лично у меня просветление наступило не быстро, я возвращался к статьям и документации очень много раз. Но результат того стоит.
Кстати шаблоны и
BEMHTML
, иBH
могут исполнятся как на сервере, так и на клиенте.В БЭМ ваш пример со списком может выглядеть так:
common.blocks/my-list/my-list.bh.js
index.bemjson.js:
Чтобы рендерить bemjson в приложении надо загрузить в node.js
BH
илиBEMHTML
, соответствующие шаблоны и вызыватьBH.apply(bemjson_string)
илиBEMHTML.apply(bemjson_string)
. Метод развернёт строку содержащую кусокbemjson
вhtml
согласно шаблонам.Или использовать app.render/res.render с названием бандла после подключения плагина express-bem и express-bem-bemhtml/-bh ;-)
Я уже глянул ШРИ - урок по БЭМ , там все показали и разъяснили!) Спасибо, еще раз!)