Войти с помощью github
Форум /

Привет всем.


Все сообщения клуба не прочитал, дошел только до 3-ей страницы, поэтому возможно какие-то вопросы будут повторятся.


Очень понравилась идея БЭМ, изучаю и читаю про bem-tools второй день, хотя в обычном CSS использую БЭМ нотацию уже давно (правда с синтаксисом модификаторов "block--mod" - там немного нагляднее).

1) Я так понимаю, когда собирается страница (bundle), собирается ее CSS, который потом раздается например NGINX для каждой отдельной страницы 


Получается для каждой страницы у нас отдельный CSS файл. Хотя их и можно закешировать надолго, но все равно - когда скажем собирается 1 файл для всего проекта как например в Ruby on Rails Assets Pipeline + на каждой странице подключаются дополнительные файлы - получается как-то более эффективно, потому что основной файл получается закеширован и если он не поменялся, пользователь будет получать все из кеша.



2) Как-то не нашел ничего про локализацию блоков.

Что-то вроде - делаем папку с en_US.js, fr_FR.js, а потом в BEMHTML описываем куда будут вставляться данные в стиле

 

this.currentLocale['main.string']

 

А язык определяется глобально на странице?

3) По сути блоки - это функции как в Erlang'е и функциональных языках - делают что-то свое обособлено 


Но по-моему сейчас главная задача состоит в компоновке блоков на странице.

 

Как я понял, сейчас это делается так:
  1. Мы описываем BEMJSON для страницы - для зависимостей и удобства верстки и отладки.
  2. Получаем данные на сервере или клиенте
  3. Повторяем BEMJSON страницы уже с данными, чтобы скормить шаблонизатору, чтобы получился HTML? 


По сути, есть 2 сущности:

  • Статическая - например, логотип, текст в header'е, текст в footer'е - они редко когда меняются. 
  • Динамическая - она берет данные откуда-то и как-то должна выводится.

 

Можно как-нибудь выделить этот единый BEMJSON для страницы с уже забитыми статическими данными и биндить данные по селектору?

У нас страница знает уже как нужно отображать блоки, мы это на этапе компиляции сделали. Получается нам нужно только вставить в уже существующий BEMJSON еще много BEMJSON сущностей.

Может какой-нибудь метод сделать, например указать для блока уникальный ID, а потом вставить в этот блок в поле content BEMJSON с данными из API?

Псевдокод: 

 

data = {
   block: 'news',
   content: [
     {
         elem: 'item',
         content: 1
     }
   ]
}
page.update('#news_field', data)
V8.run("BEMHTML.apply(#{page})"
-->
HTML <!DOCTYPE><html>...

 

Лента новостей, список пользователей, горячие предложение - блоки могут быть одни для всех этих типов, а данные разные.

 

Простой биндинг (найти и заполнить content по сути) на что-то уникальное типа ID по-моему дает хорошую, логическую структуру.

 

4) Собственно, как отправить .bemhtml.js страницы на... страницу? Просто сделать <script></script> со ссылкой на этот файл, а потом через NGINX раздать?  Чтобы можно было на клиенте шаблоны использовать

 

Спасибо.