126
Я.Субботник, Москва, 28 июля 2012 года С ергей Бережной руководитель отдела разработки поисковых интерфейсов Клиентские js-компоненты разные способы создания 1 вторник, 31 июля 12 г.

Сергей Бережной "Разные способы создания клиентских js-компонентов"

  • Upload
    yandex

  • View
    1.797

  • Download
    2

Embed Size (px)

DESCRIPTION

Какие есть варианты для программирования интерактивной функциональности в браузере. Доклад-обзор – от самых простых и древних техник с использованием «чистого» JavaScript до множества современных подходов в разных фреймворках.

Citation preview

Page 1: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Я.Субботник, Москва, 28 июля 2012 года

Сергей Бережнойруководитель отделаразработки поисковых интерфейсов

Клиентские js-компонентыразные способы создания

1

вторник, 31 июля 12 г.

Page 2: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Что это?

2

вторник, 31 июля 12 г.

Page 3: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 4: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Что это?

4

— HTML

вторник, 31 июля 12 г.

Page 5: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 6: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Что это?

6

— HTML + JavaScript

вторник, 31 июля 12 г.

Page 7: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 8: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Что это?

8

— HTML + JavaScript

— история

вторник, 31 июля 12 г.

Page 9: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 10: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 11: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Что это?

11

— JavaScript + HTML

— история + Яндекс

вторник, 31 июля 12 г.

Page 12: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 13: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Что это?

13

— JavaScript + HTML

— история + Яндекс + другие ребята

вторник, 31 июля 12 г.

Page 14: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 15: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Что это?

15

— JavaScript + HTML

— история + Яндекс + другие ребята

— полная всеобъемлющая энциклопедия

вторник, 31 июля 12 г.

Page 16: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Что это?

16

— JavaScript + HTML

— история + Яндекс + другие ребята

— полная всеобъемлющая энциклопедия

вторник, 31 июля 12 г.

Page 17: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Для кого?

17

вторник, 31 июля 12 г.

Page 18: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Для кого?

18

— разработчик, админ, тестировщик

вторник, 31 июля 12 г.

Page 19: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Для кого?

19

— разработчик, админ, тестировщик

вторник, 31 июля 12 г.

Page 20: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 21: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Для кого?

21

— разработчик

— PHP, JavaScript, Ruby, Perl, Python

вторник, 31 июля 12 г.

Page 22: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Для кого?

22

— разработчик

— PHP, JavaScript, Ruby, Perl, Python

вторник, 31 июля 12 г.

Page 23: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Для кого?

23

— разработчик

— JavaScript

— на сервере, в браузере

вторник, 31 июля 12 г.

Page 24: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Для кого?

24

— разработчик

— JavaScript

— на сервере, в браузере

вторник, 31 июля 12 г.

Page 25: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Для кого?

25

— разработчик

— JavaScript

— в браузере

вторник, 31 июля 12 г.

Page 26: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 27: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Old School

27

вторник, 31 июля 12 г.

Page 28: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 29: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 30: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 31: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 32: Сергей Бережной "Разные способы создания клиентских js-компонентов"

<a href="http://passport.yandex.ru/..." onclick="return showLogin()">

HTMLOld School

32

вторник, 31 июля 12 г.

Page 33: Сергей Бережной "Разные способы создания клиентских js-компонентов"

<div id="login-form" ... > ... <form name="login" ... > ... </form> ...</div>

HTMLOld School

33

вторник, 31 июля 12 г.

Page 34: Сергей Бережной "Разные способы создания клиентских js-компонентов"

dom = document.getElementById ? true : false;function showLogin() { if (dom && document.forms['login']) { document.getElementById('login-form') .style.display = 'block'; return false; } else return true;}

JavaScriptOld School

34

вторник, 31 июля 12 г.

Page 35: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Old School

35

вторник, 31 июля 12 г.

Page 36: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Old School

36

— плавная деградация без JavaScript

вторник, 31 июля 12 г.

Page 37: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Old School

37

— плавная деградация без JavaScript

— глобальные переменные

вторник, 31 июля 12 г.

Page 38: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 39: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Old School

39

— плавная деградация без JavaScript

— глобальные переменные

— showLogin()

вторник, 31 июля 12 г.

Page 40: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Old School

40

— плавная деградация без JavaScript

— глобальные переменные

— showLogin()

— <form name="login">

вторник, 31 июля 12 г.

Page 41: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Old School

41

— плавная деградация без JavaScript

— глобальные переменные

— showLogin()

— <form name="login">

— <div id="login-form">

вторник, 31 июля 12 г.

Page 42: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Old School

42

— плавная деградация без JavaScript

— глобальные переменные

— скрипты в <head>

вторник, 31 июля 12 г.

Page 43: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Old School

43

— плавная деградация без JavaScript

— глобальные переменные

— скрипты в <head>

— JavaScript начинает работутолько от пользовательских действий

вторник, 31 июля 12 г.

Page 44: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Начать JavaScript «сразу»

44

вторник, 31 июля 12 г.

Page 45: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 46: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Начать JavaScript «сразу»

46

— window onload

вторник, 31 июля 12 г.

Page 47: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Начать JavaScript «сразу»

47

— window onload

— вызов скриптов после HTML

вторник, 31 июля 12 г.

Page 48: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Начать JavaScript «сразу»

48

— window onload

— вызов скриптов после HTML

— domready

вторник, 31 июля 12 г.

Page 49: Сергей Бережной "Разные способы создания клиентских js-компонентов"

function r(f) { /in/.test(document.readyState) ? setTimeout('r(' + f + ')', 9) : f()}// http://www.dustindiaz.com/smallest-domready-ever/

Начать JavaScript «сразу»

49

— window onload

— вызов скриптов после HTML

— domready

вторник, 31 июля 12 г.

Page 50: Сергей Бережной "Разные способы создания клиентских js-компонентов"

jQuery-плагины

50

вторник, 31 июля 12 г.

Page 51: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 52: Сергей Бережной "Разные способы создания клиентских js-компонентов"

$.fn.myPlugin = function() { ...};

docs.jquery.com/Plugins/AuthoringjQuery-плагины

52

вторник, 31 июля 12 г.

Page 53: Сергей Бережной "Разные способы создания клиентских js-компонентов"

$.fn.myPlugin = function() { this.fadeIn( 'normal', function() { ... });};

docs.jquery.com/Plugins/AuthoringjQuery-плагины

53

вторник, 31 июля 12 г.

Page 54: Сергей Бережной "Разные способы создания клиентских js-компонентов"

$.fn.myPlugin = function() { this.fadeIn( 'normal', function() { ... });};

$('#element').myPlugin();

docs.jquery.com/Plugins/AuthoringjQuery-плагины

54

вторник, 31 июля 12 г.

Page 55: Сергей Бережной "Разные способы создания клиентских js-компонентов"

docs.jquery.com/Plugins/AuthoringjQuery-плагины

55

— самостоятельно сохранятьинициализированный js-объект в .data('myPlugin')

вторник, 31 июля 12 г.

Page 56: Сергей Бережной "Разные способы создания клиентских js-компонентов"

docs.jquery.com/Plugins/AuthoringjQuery-плагины

56

— самостоятельно сохранятьинициализированный js-объект в .data('myPlugin')

$.fn.myPlugin = function() { return this.each(function() { var $this = $(this), data = $this.data('myPlugin');

if (!data) { // init... $this.data('myPlugin', { /* ... */ }); }}};

вторник, 31 июля 12 г.

Page 57: Сергей Бережной "Разные способы создания клиентских js-компонентов"

docs.jquery.com/Plugins/AuthoringjQuery-плагины

57

— самостоятельно сохранятьинициализированный js-объект в .data('myPlugin')

— самостоятельно правильнодеактивировать контрол

вторник, 31 июля 12 г.

Page 58: Сергей Бережной "Разные способы создания клиентских js-компонентов"

docs.jquery.com/Plugins/AuthoringjQuery-плагины

58

— самостоятельно правильнодеактивировать контрол

$.fn.myPlugin = function() { return this.each(function() { var $this = $(this), data = $this.data('myPlugin');

if (!data) { // init... $this.data('myPlugin', { destroy: function() { /* ... */ } }); }}};

вторник, 31 июля 12 г.

Page 59: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Описание отдельно,использование отдельно

59

вторник, 31 июля 12 г.

Page 60: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 61: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 62: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 63: Сергей Бережной "Разные способы создания клиентских js-компонентов"

$.fn.myPlugin = function() { // ...};

$('#element').myPlugin();

Описание/использование

63

вторник, 31 июля 12 г.

Page 64: Сергей Бережной "Разные способы создания клиентских js-компонентов"

$.fn.myPlugin = function() { // ...};

$('#element').myPlugin({ // options...});

Описание/использование

64

вторник, 31 июля 12 г.

Page 65: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Декларативный подход

65

вторник, 31 июля 12 г.

Page 66: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 67: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Декларативный подход

67

<input name="login" value=""/>

вторник, 31 июля 12 г.

Page 68: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Декларативный подход

68

$.fn.myInput = function() { // ...};

$('input[name="login"]').myInput();

вторник, 31 июля 12 г.

Page 69: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Декларативный подход

69

<input name="login" value=""/><input name="password" type="password" value=""/>

вторник, 31 июля 12 г.

Page 70: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Декларативный подход

70

$.fn.myInput = function() { // ...};

$('input[name="login"]').myInput();$('input[name="password"]').myInput();

вторник, 31 июля 12 г.

Page 71: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Декларативный подход

71

$.fn.myInput = function() { /*...*/ };

$('input[name="login"]').myInput({ validator: 'login'});$('input[name="password"]').myInput({ validator: 'password'});

вторник, 31 июля 12 г.

Page 72: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Декларативный подход

72

— HTML

— JS компонентов

— JS связанный с HTML

вторник, 31 июля 12 г.

Page 73: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Декларативный подход

73

— HTML

— JS компонентов

— JS связанный с HTML

вторник, 31 июля 12 г.

Page 74: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 75: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Связь HTML и JS

75

вторник, 31 июля 12 г.

Page 76: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 77: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 78: Сергей Бережной "Разные способы создания клиентских js-компонентов"

78

<input class="myInput" name="login" value=""/>

Связь HTML и JSДекларативный подход

вторник, 31 июля 12 г.

Page 79: Сергей Бережной "Разные способы создания клиентских js-компонентов"

79

$.fn.myInput = function() { // ...};

$(function() { $('.myInput').myInput()});

Связь HTML и JSДекларативный подход

вторник, 31 июля 12 г.

Page 80: Сергей Бережной "Разные способы создания клиентских js-компонентов"

80

$.fn.myInput = function() { /* ... */ };

$(function() { $('body').on('change', '.myInput', function() { $(this).myInput() })});

Связь HTML и JSДекларативный подход

вторник, 31 июля 12 г.

Page 81: Сергей Бережной "Разные способы создания клиентских js-компонентов"

change не работает

81

вторник, 31 июля 12 г.

Page 82: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 83: Сергей Бережной "Разные способы создания клиентских js-компонентов"

83

$.fn.myInput = function() { // ...};

$(function() { $('.myInput').myInput()});

Связь HTML и JSДекларативный подход

вторник, 31 июля 12 г.

Page 84: Сергей Бережной "Разные способы создания клиентских js-компонентов"

84

Связь HTML и JS: ПараметрыДекларативный подход

вторник, 31 июля 12 г.

Page 85: Сергей Бережной "Разные способы создания клиентских js-компонентов"

85

<input class="myInput" data-validator="login" name="login" value=""/>

Связь HTML и JS: ПараметрыДекларативный подход

вторник, 31 июля 12 г.

Page 86: Сергей Бережной "Разные способы создания клиентских js-компонентов"

86

$.fn.myInput = function() {

this.data('validator') === 'login'

};

Связь HTML и JS: ПараметрыДекларативный подход

вторник, 31 июля 12 г.

Page 87: Сергей Бережной "Разные способы создания клиентских js-компонентов"

87

<input class="myInput" onclick="return { validator: 'login' }" name="login" value=""/>

Связь HTML и JS: ПараметрыДекларативный подход

вторник, 31 июля 12 г.

Page 88: Сергей Бережной "Разные способы создания клиентских js-компонентов"

88

$.fn.myInput = function() {

this[0].onclick().validator === 'login'

};

Связь HTML и JS: ПараметрыДекларативный подход

вторник, 31 июля 12 г.

Page 89: Сергей Бережной "Разные способы создания клиентских js-компонентов"

89

<input class="myInput" onclick="return { validator: { ... } }" name="login" value=""/>

Связь HTML и JS: ПараметрыДекларативный подход

вторник, 31 июля 12 г.

Page 90: Сергей Бережной "Разные способы создания клиентских js-компонентов"

90

<input class="myInput" onclick="return { validator: function() { ... } }" name="login" value=""/>

Связь HTML и JS: ПараметрыДекларативный подход

вторник, 31 июля 12 г.

Page 91: Сергей Бережной "Разные способы создания клиентских js-компонентов"

91

<input class="myInput" onclick="return { validator: require('validators').login }" name="login" value=""/>

Связь HTML и JS: ПараметрыДекларативный подход

вторник, 31 июля 12 г.

Page 92: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 93: Сергей Бережной "Разные способы создания клиентских js-компонентов"

93

$(function() { $('.myInput').myInput(); $('.myButton').myButton(); $('.myBlabla').myBlabla();});

Связь HTML и JSДекларативный подход

вторник, 31 июля 12 г.

Page 94: Сергей Бережной "Разные способы создания клиентских js-компонентов"

94

<input class="myInput js" data-component="myInput" data-validator="login" name="login" value=""/>

Связь HTML и JSДекларативный подход

вторник, 31 июля 12 г.

Page 95: Сергей Бережной "Разные способы создания клиентских js-компонентов"

95

$(function() { $('.js').each(function() { var $this = $(this); $this[$this.data('component')](); })})

Связь HTML и JSДекларативный подход

вторник, 31 июля 12 г.

Page 96: Сергей Бережной "Разные способы создания клиентских js-компонентов"

AJAXи динамическая инициализация

96

вторник, 31 июля 12 г.

Page 97: Сергей Бережной "Разные способы создания клиентских js-компонентов"

97

$.ajax({ url: '...', success: function(data) { $('body').append(data) }})

Динамическая инициализация

вторник, 31 июля 12 г.

Page 98: Сергей Бережной "Разные способы создания клиентских js-компонентов"

98

$.fn.myInit = function() { this.find('.js').each(function() { var $this = $(this); $this[$this.data('component')](); }); return this;})

Динамическая инициализация

вторник, 31 июля 12 г.

Page 99: Сергей Бережной "Разные способы создания клиентских js-компонентов"

99

$.ajax({ url: '...', success: function(data) { $(data) .myInit() .appendTo('body') }})

Динамическая инициализация

вторник, 31 июля 12 г.

Page 100: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 101: Сергей Бережной "Разные способы создания клиентских js-компонентов"

docs.jquery.com/Plugins/AuthoringjQuery-плагины

101

— самостоятельно правильнодеактивировать контрол

$.fn.myPlugin = function() { return this.each(function() { var $this = $(this), data = $this.data('myPlugin');

if (!data) { // init... $this.data('myPlugin', { destroy: function() { /* ... */ } }); }}};

вторник, 31 июля 12 г.

Page 102: Сергей Бережной "Разные способы создания клиентских js-компонентов"

102

$.fn.myDestroy = function() { this.find('.js').each(function() { var $this = $(this), name = $this.data('component'); $this.data(name).destroy(); }); return this.remove();})

Динамическая инициализация

вторник, 31 июля 12 г.

Page 103: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 104: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Высокоуровневое API

104

вторник, 31 июля 12 г.

Page 105: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 106: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Высокоуровневое API

106

— jQuery UIhttp://wiki.jqueryui.com/w/page/12138135/Widget%20factory

вторник, 31 июля 12 г.

Page 107: Сергей Бережной "Разные способы создания клиентских js-компонентов"

$.widget('my.component', {  _create: function() { /* ... */ },  destroy: function() { /* ... */ }  myMethod: function() { /* ... */ },});

jQuery UIВысокоуровневое API

107

вторник, 31 июля 12 г.

Page 108: Сергей Бережной "Разные способы создания клиентских js-компонентов"

$.widget('ui.dialog', $.ui.dialog, {  close: function() {    if(confirm('Close???')) {      this._super('close')    }  }})

jQuery UIВысокоуровневое API

108

вторник, 31 июля 12 г.

Page 109: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Высокоуровневое API

109

— jQuery UIwiki.jqueryui.com/w/page/12138135/Widget%20factory

— i-bem.jsclubs.ya.ru/bem/posts.xml?tag=68697803

вторник, 31 июля 12 г.

Page 110: Сергей Бережной "Разные способы создания клиентских js-компонентов"

BEM.DOM.decl( { block: 'my-dialog', baseBlock: 'dialog' }, {   myMethod: function() { this.__base(); this.__self.myStaticMethod(); } }, { myStaticMethod: function() { /*...*/ } });

i-bem.jsВысокоуровневое API

110

вторник, 31 июля 12 г.

Page 111: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Итого

111

вторник, 31 июля 12 г.

Page 112: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 113: Сергей Бережной "Разные способы создания клиентских js-компонентов"

БылоИтого

113

вторник, 31 июля 12 г.

Page 114: Сергей Бережной "Разные способы создания клиентских js-компонентов"

БылоИтого

114

— глобальные переменные и модульность

вторник, 31 июля 12 г.

Page 115: Сергей Бережной "Разные способы создания клиентских js-компонентов"

БылоИтого

115

— глобальные переменные и модульность

— инициализация + деактивация

вторник, 31 июля 12 г.

Page 116: Сергей Бережной "Разные способы создания клиентских js-компонентов"

БылоИтого

116

— глобальные переменные и модульность

— инициализация + деактивация

— декларативный подход:связь html и js + проброс параметров

вторник, 31 июля 12 г.

Page 117: Сергей Бережной "Разные способы создания клиентских js-компонентов"

БылоИтого

117

— глобальные переменные и модульность

— инициализация + деактивация

— декларативный подход:связь html и js + проброс параметров

— ajax и динамическая инициализация

вторник, 31 июля 12 г.

Page 118: Сергей Бережной "Разные способы создания клиентских js-компонентов"

БылоИтого

118

— глобальные переменные и модульность

— инициализация + деактивация

— декларативный подход:связь html и js + проброс параметров

— ajax и динамическая инициализация

— высокоуровневое API

вторник, 31 июля 12 г.

Page 119: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Не былоИтого

119

вторник, 31 июля 12 г.

Page 120: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Не былоИтого

120

— зависимости: подгрузка и сборка

вторник, 31 июля 12 г.

Page 121: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Не былоИтого

121

— зависимости: подгрузка и сборка

— сложные связи между компонентами

вторник, 31 июля 12 г.

Page 122: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Не былоИтого

122

— зависимости: подгрузка и сборка

— сложные связи между компонентами

— дата биндинги

вторник, 31 июля 12 г.

Page 123: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Не былоИтого

123

— зависимости: подгрузка и сборка

— сложные связи между компонентами

— дата биндинги

— …

вторник, 31 июля 12 г.

Page 124: Сергей Бережной "Разные способы создания клиентских js-компонентов"

вторник, 31 июля 12 г.

Page 126: Сергей Бережной "Разные способы создания клиентских js-компонентов"

Сложные связимежду компонентами

126

вторник, 31 июля 12 г.