37
BEMTREE – генерируй дерево Сергей Максимов BEMup в рамках YaC 2013, Москва

Сергей Максимов — BEMTREE — генерируй дерево

  • Upload
    yandex

  • View
    593

  • Download
    0

Embed Size (px)

DESCRIPTION

Рассказ о том, как мы дошли до двухпроходной шаблонизации. Как можно шаблонизировать данные, если не верстка, а структура диктует построение шаблонов. И как мы генерируем БЭМ-дерево с помощью технологии BEMTREE.

Citation preview

Page 1: Сергей Максимов — BEMTREE — генерируй дерево

BEMTREE – генерируй деревоСергей МаксимовBEMup в рамках YaC 2013, Москва

Page 2: Сергей Максимов — BEMTREE — генерируй дерево

Генерация страницы

2

data HTML

Page 3: Сергей Максимов — BEMTREE — генерируй дерево

Шаблонизаторы

Тысячи их

Page 4: Сергей Максимов — BEMTREE — генерируй дерево

Template Toolkit 2

4

Page 5: Сергей Максимов — BEMTREE — генерируй дерево

Генерация страницы

5

data html

Page 6: Сергей Максимов — BEMTREE — генерируй дерево

TT: шаблон

[% SET title = 'Hello World' %]

<h1>[% title %]</h1>

6

Page 7: Сергей Максимов — BEMTREE — генерируй дерево

TT: конструкции[% IF name == 'admin' %]

<button>Drop DB</button>

[% END %]

[% FOREACH i IN items %]

* [% i %]

[% END %]

7

Page 8: Сергей Максимов — BEMTREE — генерируй дерево

TT: шаблон посложнее[%~ MACRO b_banner_preview(options) BLOCK; ~%]

<div class="[% class.join(' ') %]">

b_banner_preview__title(options);

b_banner_preview__body(options);

b_banner_preview__footer(options);

b_banner_preview__alert(options) IF options.alert;

</div>

[%~ END; ~%]8

Page 9: Сергей Максимов — BEMTREE — генерируй дерево
Page 10: Сергей Максимов — BEMTREE — генерируй дерево
Page 11: Сергей Максимов — BEMTREE — генерируй дерево
Page 12: Сергей Максимов — BEMTREE — генерируй дерево
Page 13: Сергей Максимов — BEMTREE — генерируй дерево
Page 14: Сергей Максимов — BEMTREE — генерируй дерево

Template Toolkit 2Плюсы

простой

без компиляции

возможны perl-вставки

Минусы

медленный

невыразительный14

Page 15: Сергей Максимов — BEMTREE — генерируй дерево

Двухпроходная шаблонизация

15

data ctx viewview ctx

Page 16: Сергей Максимов — BEMTREE — генерируй дерево

Двухпроходная шаблонизация

16

data htmlbemjson

Page 17: Сергей Максимов — BEMTREE — генерируй дерево

BEMJSON – JavaScript-представление БЭМ-дерева

17

Page 18: Сергей Максимов — BEMTREE — генерируй дерево

BEMJSON: page

{

block: 'page',

content: [

{ elem: ‘head’, content: [...] },

{ elem: ‘body’, content: [...] }

]

}

18

Page 19: Сергей Максимов — BEMTREE — генерируй дерево

HTML: page

<!DOCTYPE html>

<html>

<head>

</head>

<body>

</body>

</html>

19

Page 20: Сергей Максимов — BEMTREE — генерируй дерево

priv.js – технология геренации БЭМ-дерева с использованием чистого JavaScript

20

Page 21: Сергей Максимов — BEMTREE — генерируй дерево

priv.jsblocks[‘page’] = function(data) {

var title = data.title;

return {

block: ‘page’,

title: title,

content: blocks[‘page__body’](data)

}

}21

Page 22: Сергей Максимов — BEMTREE — генерируй дерево

priv.js

Плюсы

просто

быстро

сердито

Минусы

неудобно

22

Page 23: Сергей Максимов — BEMTREE — генерируй дерево

BEMTREE – технология генерации БЭМ-дерева, синтаксически схожа с BEMHTML

23

Page 24: Сергей Максимов — BEMTREE — генерируй дерево

Генерация страницы

24

BEMTREE BEMHTMLdata bemjson html

Page 25: Сергей Максимов — BEMTREE — генерируй дерево

Генерация страницы

25

data html

Page 26: Сергей Максимов — BEMTREE — генерируй дерево

Шаблоны блоков

26

Page 27: Сергей Максимов — BEMTREE — генерируй дерево

BEMJSON: page

{

block: 'page',

content: [

{ elem: ‘head’, content: [...] },

{ elem: ‘body’, content: [...] }

]

}

27

Page 28: Сергей Максимов — BEMTREE — генерируй дерево

BEMTREE: page

block page {

content: [

{ elem: ‘head’ },

{ elem: ‘body’ }

]

}

28

Page 29: Сергей Максимов — BEMTREE — генерируй дерево

BEMTREE: page__head

block page, elem head, content: [

{ elem: ‘meta’, name: ‘keywords’, content: ‘bem bemup javascript’ },

{ elem: ‘title’, content: this.data.title }

]

29

Page 30: Сергей Максимов — BEMTREE — генерируй дерево

BEMTREE: page__head

block page, elem head, content: [

{ elem: ‘meta’, name: ‘keywords’, content: ‘bem bemup javascript’ },

{ elem: ‘title’, content: this.data.title }

]

30

Page 31: Сергей Максимов — BEMTREE — генерируй дерево

BEMTREE: page__body

block page, elem body { content: ‘default content’ content, this.data.page == ‘search’: [ ... ]

}

31

Page 32: Сергей Максимов — BEMTREE — генерируй дерево

BEMTREE: page__body

block page, elem body { content: ‘default content’ content, this.data.page == ‘search’: [ ... ]

}

32

Page 33: Сергей Максимов — BEMTREE — генерируй дерево

BEMTREE. Асинхронность

Блоки умеют ходить за данными

33

Page 34: Сергей Максимов — BEMTREE — генерируй дерево

BEMTREEПлюсы

синтаксис

декларативность

БЭМ-ориентированность

Минусы

синтаксис

компиляция34

Page 35: Сергей Максимов — BEMTREE — генерируй дерево

Ссылки

bem-corehttps://github.com/bem/bem-core/blob/v1/.bem/techs/bemtree.js

35

Page 36: Сергей Максимов — BEMTREE — генерируй дерево

36

Сергей МаксимовРуководитель группы интерфейсов Справочника и Директа

[email protected]@dosyara

Page 37: Сергей Максимов — BEMTREE — генерируй дерево

Спасибо, %username