Какие есть варианты для программирования интерактивной функциональности в браузере. Доклад-обзор – от самых простых и древних техник с использованием «чистого» JavaScript до множества современных подходов в разных фреймворках.
Дмитрий Ветров. Математика больших данных: тензоры, нейросети, байесовский вы...
Сергей Бережной "Разные способы создания клиентских js-компонентов"
1. Клиентские js-компоненты
разные способы создания
Сергей Бережной
руководитель отдела
разработки поисковых интерфейсов
Я.Субботник, Москва, 28 июля 2012 года
1
вторник, 31 июля 12 г.
39. Old School
— плавная деградация без JavaScript
— глобальные переменные
— showLogin()
39
вторник, 31 июля 12 г.
40. Old School
— плавная деградация без JavaScript
— глобальные переменные
— showLogin()
— <form name="login">
40
вторник, 31 июля 12 г.
41. Old School
— плавная деградация без JavaScript
— глобальные переменные
— showLogin()
— <form name="login">
— <div id="login-form">
41
вторник, 31 июля 12 г.
42. Old School
— плавная деградация без JavaScript
— глобальные переменные
— скрипты в <head>
42
вторник, 31 июля 12 г.
43. Old School
— плавная деградация без JavaScript
— глобальные переменные
— скрипты в <head>
— JavaScript начинает работу
только от пользовательских действий
43
вторник, 31 июля 12 г.
55. jQuery-плагины
docs.jquery.com/Plugins/Authoring
— самостоятельно сохранять
инициализированный js-объект в .data('myPlugin')
55
вторник, 31 июля 12 г.
56. jQuery-плагины
docs.jquery.com/Plugins/Authoring
— самостоятельно сохранять
инициализированный js-объект в .data('myPlugin')
$.fn.myPlugin = function() { return this.each(function() {
var $this = $(this),
data = $this.data('myPlugin');
if (!data) {
// init...
$this.data('myPlugin', { /* ... */ });
}
}};
56
вторник, 31 июля 12 г.
57. jQuery-плагины
docs.jquery.com/Plugins/Authoring
— самостоятельно сохранять
инициализированный js-объект в .data('myPlugin')
— самостоятельно правильно
деактивировать контрол
57
вторник, 31 июля 12 г.
58. jQuery-плагины
docs.jquery.com/Plugins/Authoring
— самостоятельно правильно
деактивировать контрол
$.fn.myPlugin = function() { return this.each(function() {
var $this = $(this), data = $this.data('myPlugin');
if (!data) {
// init...
$this.data('myPlugin', {
destroy: function() { /* ... */ }
});
}
}};
58
вторник, 31 июля 12 г.
78. Декларативный подход
Связь HTML и JS
<input
class="myInput"
name="login"
value=""/>
78
вторник, 31 июля 12 г.
79. Декларативный подход
Связь HTML и JS
$.fn.myInput = function() {
// ...
};
$(function() {
$('.myInput').myInput()
});
79
вторник, 31 июля 12 г.
80. Декларативный подход
Связь HTML и JS
$.fn.myInput = function() { /* ... */ };
$(function() {
$('body').on('change', '.myInput',
function() { $(this).myInput() })
});
80
вторник, 31 июля 12 г.
85. Декларативный подход
Связь HTML и JS: Параметры
<input
class="myInput"
data-validator="login"
name="login"
value=""/>
85
вторник, 31 июля 12 г.
86. Декларативный подход
Связь HTML и JS: Параметры
$.fn.myInput = function() {
this.data('validator') === 'login'
};
86
вторник, 31 июля 12 г.
87. Декларативный подход
Связь HTML и JS: Параметры
<input
class="myInput"
onclick="return {
validator: 'login'
}"
name="login"
value=""/>
87
вторник, 31 июля 12 г.
88. Декларативный подход
Связь HTML и JS: Параметры
$.fn.myInput = function() {
this[0].onclick().validator === 'login'
};
88
вторник, 31 июля 12 г.
89. Декларативный подход
Связь HTML и JS: Параметры
<input
class="myInput"
onclick="return {
validator: { ... }
}"
name="login"
value=""/>
89
вторник, 31 июля 12 г.
90. Декларативный подход
Связь HTML и JS: Параметры
<input
class="myInput"
onclick="return {
validator: function() { ... }
}"
name="login"
value=""/>
90
вторник, 31 июля 12 г.
91. Декларативный подход
Связь HTML и JS: Параметры
<input
class="myInput"
onclick="return {
validator: require('validators').login
}"
name="login"
value=""/>
91
вторник, 31 июля 12 г.
93. Декларативный подход
Связь HTML и JS
$(function() {
$('.myInput').myInput();
$('.myButton').myButton();
$('.myBlabla').myBlabla();
});
93
вторник, 31 июля 12 г.
94. Декларативный подход
Связь HTML и JS
<input
class="myInput js"
data-component="myInput"
data-validator="login"
name="login"
value=""/>
94
вторник, 31 июля 12 г.
95. Декларативный подход
Связь HTML и JS
$(function() {
$('.js').each(function() {
var $this = $(this);
$this[$this.data('component')]();
})
})
95
вторник, 31 июля 12 г.
96. AJAX
и динамическая
инициализация
96
вторник, 31 июля 12 г.
97. Динамическая инициализация
$.ajax({
url: '...',
success: function(data) {
$('body').append(data)
}
})
97
вторник, 31 июля 12 г.
98. Динамическая инициализация
$.fn.myInit = function() {
this.find('.js').each(function() {
var $this = $(this);
$this[$this.data('component')]();
});
return this;
})
98
вторник, 31 июля 12 г.
99. Динамическая инициализация
$.ajax({
url: '...',
success: function(data) {
$(data)
.myInit()
.appendTo('body')
}
})
99
вторник, 31 июля 12 г.
114. Итого
Было
— глобальные переменные и модульность
114
вторник, 31 июля 12 г.
115. Итого
Было
— глобальные переменные и модульность
— инициализация + деактивация
115
вторник, 31 июля 12 г.
116. Итого
Было
— глобальные переменные и модульность
— инициализация + деактивация
— декларативный подход:
связь html и js + проброс параметров
116
вторник, 31 июля 12 г.
117. Итого
Было
— глобальные переменные и модульность
— инициализация + деактивация
— декларативный подход:
связь html и js + проброс параметров
— ajax и динамическая инициализация
117
вторник, 31 июля 12 г.
118. Итого
Было
— глобальные переменные и модульность
— инициализация + деактивация
— декларативный подход:
связь html и js + проброс параметров
— ajax и динамическая инициализация
— высокоуровневое API
118
вторник, 31 июля 12 г.