-
Notifications
You must be signed in to change notification settings - Fork 8
added new doc quickstart #1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,270 @@ | ||
| ## Быстрый старт по созданию статической страницы с БЭМ | ||
|
|
||
| В этой статье рассмотрен пример реализации статической страницы по [БЭМ-методологии](https://ru.bem.info/method/). | ||
|
|
||
| ## Что должно получиться | ||
|
|
||
| Страница приветствия пользователя, содержащая поле ввода, кнопку и текст. При нажатии на кнопку страница обновляется и текст дополняется значением, введенным в поле. | ||
|
|
||
|  | ||
|
|
||
| ## С чего начать | ||
|
|
||
| ### Минимальные требования | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
|
|
||
| Установленная платформа [Node.js 0.10](http://nodejs.org). | ||
|
|
||
| ### Локальная копия и настройка окружения | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. В разделе приведена достаточно четкая последовательность действий ("сделать копию", "запустить сервер" и т.п.). Последовательность действий выглядит нагляднее, когда приведена в рамках нумерованного списка. Сейчас фраза про "делаем локальную копию" вообще теряется, так как это, вроде, и действие, но спрятано за текстом про то, что нам поможет. |
||
|
|
||
| Для быстрого и простого создания БЭМ-проекта потребуется [шаблонный репозиторий](https://github.com/bem/project-stub), содержащий необходимый минимум конфигурационных файлов и папок. | ||
|
|
||
| 1. Сделайте локальную копию `project-stub`. | ||
|
|
||
| **NB** В данном документе описана процедура установки для ревизии [13ae0e18ef8f48bc552b4944f7e5971c5b5f4768](https://github.com/bem/project-stub/ commit/13ae0e18ef8f48bc552b4944f7e5971c5b5f4768). Процесс установки последующих версий может отличаться. | ||
|
|
||
| ```bash | ||
| git clone https://github.com/bem/project-stub.git start-project | ||
| cd start-project | ||
| git checkout 13ae0e18ef8f48bc552b4944f7e5971c5b5f4768 | ||
| npm install | ||
| ``` | ||
|
|
||
| 2. Запустите сервер с помощью [ENB](https://ru.bem.info/tools/bem/enb-bem-techs/): | ||
|
|
||
| ```bash | ||
| node_modules/.bin/npm start | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. node_modules/.bin/npm start -> npm start |
||
| ``` | ||
|
|
||
| 3. Проверьте результат по ссылке [http://localhost:8080/desktop.bundles/index/index.html](http://localhost:8080/desktop.bundles/index/index.html). | ||
|
|
||
| Должна открыться страница с примерами блоков библиотеки: | ||
|
|
||
|  | ||
|
|
||
| ## Пошаговая инструкция по созданию проекта | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Если инструкцию стоит выполнять последовательно, то список должен быть нумерованным, а не маркированным. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Почему-то элементы списка второго уровня приводятся на той же строчке, а не с новой.
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. При отправке PR списки почему-то съезжают. После сохранения документа нужно вручную их править. |
||
|
|
||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Давайте перед списком одним предложением напишем, что это общий порядок. Здесь важно сформулировать это так, чтобы оправдать названия пунктов в именительном падеже (ведь речь о действиях идет). |
||
| Процедура разработки страницы приветствия состоит из следующих этапов: | ||
|
|
||
| 1. [Создание страницы](#page_creation) <br> | ||
| 1.1 [Описание страницы в BEMJSON-файле](#BEMJSON_declaration) | ||
| 2. [Создание блока](#block_creation) | ||
| 3. [Реализация блока hello](#block_hello_modification) <br> | ||
| 3.1 [В технологии JavaScript](#JS_modification) <br> | ||
| 3.2 [В технологии BEMHTML](#BEMHTML_modification) <br> | ||
| 3.3 [В технологии CSS](#CSS_modification) | ||
|
|
||
| После выполнения всех шагов можно смотреть [результат](#result). | ||
|
|
||
| <a name="page_creation"></a> | ||
|
|
||
| ### 1. Создание страницы | ||
|
|
||
| Исходники страниц размещаются в каталоге `start-project/desktop.bundles`. Изначально в проекте присутствует главная страница `index.html` с примерами блоков библиотеки [bem-components](https://ru.bem.info/libs/bem-components/). | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. index.html — это результат генерации из index.bemjson.js. Думаю, лучше перефразировать в «Изначально в проекте присутствует декларация главной страницы |
||
|
|
||
| Для начала работы с собственным проектом создайте новую страницу. Разместите в `desktop.bundles` каталог с именем `hello` и добавьте в него файл `hello.bemjson.js`. | ||
|
|
||
|
|
||
| <a name="BEMJSON_declaration"></a> | ||
|
|
||
| #### 1.1 Описание страницы в BEMJSON-файле | ||
|
|
||
| [BEMJSON-файл](https://ru.bem.info/technology/bemjson/) – это структура страницы, описанная в терминах блоков, элементов и модификаторов. | ||
|
|
||
| 1. Добавьте на своем проекте описание блока `hello` в файле `desktop.bundles/hello/hello.bemjson.js`. <br> | ||
| Блок **hello** – это сущность, которая содержит в себе все необходимые для проекта элементы. | ||
|
|
||
| ```js | ||
| { | ||
| block: 'page', | ||
| title: 'hello', | ||
| head: [ | ||
| { elem: 'css', url: '_hello.css' } | ||
| ], | ||
| scripts: [{ elem: 'js', url: '_hello.js' }], | ||
| mods: { theme: 'islands' } | ||
| content: [ | ||
| { | ||
| block: 'hello' | ||
| } | ||
| ] | ||
| } | ||
| ``` | ||
|
|
||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. нужно пару слов написать про BEMJSON (что это такое и дать ссылку на описание технологии) |
||
| 2. Поместите элемент `greeting` с текстом приветствия пользователя (поле **content**) в блок **hello**. <br> | ||
| Элемент **greeting** – это подсущность, в которую вкладывается фраза приветствия и готовые реализации блоков библиотеки `bem-components`. | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. «подсущность» — это точно хорошее слово, которое что-то объясняет читателю? |
||
|
|
||
| ```js | ||
| content: [ | ||
| { | ||
| block: 'hello', | ||
| content: [ | ||
| { | ||
| elem: 'greeting', | ||
| content: 'Привет, %пользователь%!' | ||
| } | ||
| ] | ||
| } | ||
| ] | ||
| ``` | ||
|
|
||
| 3. Чтобы создать поле ввода и кнопку возьмите готовые реализации блоков `input` и `button` из библиотеки `bem-components` и добавьте их в элемент `greeting`. | ||
|
|
||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Здесь, зачем-то, выведен пример целиком, хотя, как и в предыдущем пункте, мы вносим правки во вполне конкретную секцию файла.
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Примеры достаточно небольшие и мы специально брали весь код полностью для каждого примера, чтобы было наглядно видно, как разрастается BEMJSON. |
||
| ```js | ||
| content: [ | ||
| { | ||
| block: 'hello', | ||
| content: [ | ||
| { | ||
| elem: 'greeting', | ||
| content: 'Привет, %пользователь%!' | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. про поле content ничего перед этим не было сказано. |
||
| }, | ||
| { | ||
| block: 'input', | ||
| mods: { theme: 'islands', size: 'm' }, | ||
| name: 'name', | ||
| placeholder: 'Имя пользователя' | ||
| }, | ||
| { | ||
| block : 'button', | ||
| mods : { theme : 'islands', size : 'm', type : 'submit' }, | ||
| text : 'Нажать' | ||
| } | ||
| ] | ||
| } | ||
| ] | ||
| ``` | ||
|
|
||
| [Полный код](https://gist.github.com/4exova/1c2bdb1c2a2dbb2cb649) BEMJSON-файла. | ||
|
|
||
| Чтобы убедиться, что страница отображает все необходимые объекты, откройте [http://localhost:8080/desktop.bundles/hello/hello.html](http://localhost:8080/desktop.bundles/hello/hello.html). | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. лишний спейс после «откройте» |
||
|
|
||
| Если вы хотите внести какие-либо изменения в существующие блоки, это можно сделать на своем [уровне переопределения](https://ru.bem.info/tools/bem/bem-tools/levels/). | ||
|
|
||
| <a name="block_creation"></a> | ||
|
|
||
| ### 2. Создание блока | ||
|
|
||
| Чтобы элементы на странице работали должным образом необходимо прописать дополнительную функциональность блока `hello` на своем уровне переопределения. | ||
|
|
||
| 1. Создайте вручную каталог блока `hello` на уровне `desktop.blocks`. | ||
| 2. Разместите в нем необходимые для проекта [файлы технологий реализации блока](https://ru.bem.info/method/filesystem/) (`CSS`, `JS`, `BEMHTML`). Название каталога блока и вложенных в него файлов должны совпадать с именем блока, которое прописано в BEMJSON-файле. | ||
|
|
||
| * `hello.js` – описывает динамическую функциональность страниц; | ||
| * `hello.bemhtml` – шаблоны для генерации HTML-представления блока; | ||
| * `hello.css` – изменяет внешний вид объектов на странице. | ||
|
|
||
| <a name="block_hello_modification"></a> | ||
|
|
||
| ### 3. Реализация блока hello | ||
|
|
||
| Для представления блока в терминах БЭМ необходимо реализовать его в следующих технологиях. | ||
|
|
||
| <a name="JS_modification"></a> | ||
|
|
||
| #### 3.1 Реализация блока в технологии JavaScript | ||
|
|
||
| 1. Опишите в файле `desktop.blocks/hello/hello.js` реакцию блока на действие пользователя с помощью специального свойства `onSetMode`. При нажатии кнопки в текст приветствия будет подставляться имя пользователя, введенное в поле input. <br> | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. onSetMode -> onSetMod |
||
| JavaScript-код написан с использованием декларативного JavaScript-фреймворка – [i-bem.js](https://ru.bem.info/technology/i-bem/). | ||
|
|
||
| ```js | ||
| onSetMod: { | ||
| 'js': { | ||
| 'inited': function() { | ||
| this._input = this.findBlockInside('input'); | ||
|
|
||
| this.bindTo('submit', function(e) { | ||
| e.preventDefault(); | ||
| this.elem('greeting').text('Привет, ' + this._input.getVal() + '!'); | ||
| }); | ||
| } | ||
| } | ||
| } | ||
|
|
||
| ``` | ||
|
|
||
| 2. Используйте модульную систему [YModules](https://ru.bem.info/tools/bem/modules/), чтобы представить данный JavaScript-код: | ||
|
|
||
| ```js | ||
| modules.define( | ||
| 'hello', // имя блока | ||
| ['i-bem__dom'], // подключение зависимости | ||
| function(provide, BEMDOM) { // функция, в которую передаются имена используемых модулей | ||
| provide(BEMDOM.decl('hello', { // декларация блока | ||
| onSetMod: { // конструктор для описания реакции на события | ||
| 'js': { | ||
| 'inited': function() { | ||
| this._input = this.findBlockInside('input'); | ||
|
|
||
| this.bindTo('submit', function(e) { // событие, на которое будет реакция | ||
| e.preventDefault(); // предотвращение срабатывания события по умолчанию (отправка данных формы на сервер с перезагрузкой страницы) | ||
| this.elem('greeting').text('Привет, ' + this._input.getVal() + '!'); | ||
| }); | ||
| } | ||
| } | ||
| } | ||
| })); | ||
| }); | ||
| ``` | ||
|
|
||
| <a name="BEMHTML_modification"></a> | ||
|
|
||
| #### 3.2 Реализация блока в технологии BEMHTML | ||
|
|
||
| [BEMHTML](https://ru.bem.info/technology/bemhtml/current/rationale/) – технология, которая преобразует входные данные из BEMJSON-файла в HTML. | ||
|
|
||
| 1. Напишите [BEMHTML-шаблон](https://ru.bem.info/technology/bemhtml/current/reference/) и укажите в нем, что блок `hello` имеет JavaScript-реализацию. | ||
| 2. Оберните блок `hello` в форму, добавив моду `tag`. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. --"мода" = "модификатор"?-- |
||
|
|
||
| ```js | ||
| block('hello')( | ||
| js()(true), | ||
| tag()('form') | ||
| ); | ||
| ``` | ||
|
|
||
| <a name="CSS_modification"></a> | ||
|
|
||
| #### 3.3 Реализация блока в технологии CSS | ||
|
|
||
| Для блока `hello` создайте свои CSS-правила. Например, такие: | ||
|
|
||
| ```js | ||
| .hello | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. .hello
{
color: green;
} |
||
| { | ||
| color: green; | ||
| padding: 10%; | ||
| } | ||
|
|
||
| .hello__greeting | ||
| { | ||
| margin-bottom: 12px; | ||
| } | ||
|
|
||
| .hello__input | ||
| { | ||
| margin-right: 12px; | ||
| } | ||
| ``` | ||
|
|
||
| Для добавления к элементу `input` CSS правил, уже реализованных в блоке `hello`, подмешайте элемент с помощью метода `mix` во входных данных (BEMJSON). | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. метода -> поля |
||
|
|
||
| ```js | ||
| { | ||
| block: 'input', | ||
| mods: { theme: 'islands', size: 'm' }, | ||
| mix: { block: 'hello', elem: 'input' }, // подмешиваем элемент для добавления CSS-правил | ||
| name: 'name', | ||
| placeholder: 'Имя пользователя' | ||
| } | ||
| ``` | ||
| [Полный код](https://gist.github.com/4exova/981a36cedceffa472742) BEMJSON-файла. | ||
|
|
||
| <a name="result"></a> | ||
|
|
||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. здесь про миксы надо упомянуть и показать BEMJSON с применением миксов. В главе про описание страницы он не нужен. |
||
| ## Результат | ||
|
|
||
| Чтобы увидеть итог проделанной работы обновите страницу: | ||
|
|
||
| http://localhost:8080/desktop.bundles/hello/hello.html | ||
|
|
||
| Поскольку проект состоял всего из одной страницы, то необходимость в полной сборке отсутствует. Информация о том, как написать более сложный проект приведена в статье [Создаем свой проект на БЭМ](https://ru.bem.info/tutorials/start-with-project-stub/). | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Самое общее: quickstart на то и quickstart, чтобы быстро что-то сделать и увидеть. По текущей инструкции сделать быстро не получается, потому что:
Решение: четко прописать какие команды в каком каталоге выполнять, описание "о чем это" не приводить, но дать ссылки на соответствующие документы/разделы других документов.
Решение: сделать нумерованные списки, где уместно -- писать, какой результат ожидается на данном шаге.
Решение:
Ограничиться каким-то одним способом решения поставленной задачи (варианты путают новичка). Если их оставлять, то как-то не очень заметно.
Убрать все попытки сделать текст изысканным: нужна простая и лаконичная инструкция (то есть -- описание последовательности действий).
Решение: текст сам сократится, если убрать обвязки и лучше его структурировать (см. выше). Еще можно убрать примеры реализации из текста, вместо этого положить их в виде готовых файликов рядышком. И дать ссылки. Мол, скопируйте в такой-то каталог такой-то файл. Он реализован в том-то, почитать про это можно там-то.