SlideShare a Scribd company logo
Ractive.js — реактивные усы 
Ефим Соловьев MoscowJS 27/11/14
Бриллиантовый век веб-разработки 
● Новостной портал - The Guardian 
● Автор Rich Harris 
2
● Нет DI контейнера или роутинга 
● V в MVC 
● По сути это: 
● Шаблон 
● Данные 
3 
Бриллиантовый век веб-разработки
● Шаблон 
● Данные 
● Анимация и SVG 
● Директивы 
● Наблюдатели 
● Промисы 
4 
О чем сегодня?
Шаблон
6 
Шаблон. Mustache. 
Итерация в шаблоне 
{{#users}} 
<a href='/users/{{@index+1}}'>{{name}}</a> 
{{/users}}
<a href='/users/1'>Алан</a> 
<a href='/users/2'>Андрей</a> 
<a href='/users/3'>Эмиль</a> 
7 
Шаблон. Mustache. 
Результат выполнения
8 
Шаблон. Выражения. 
// Алгебра 
<p>{{quantaty * price}}</p> 
// Нативные функции 
<p>{{Math.abs(-1)}}</p> 
// Сторонние библиотеки 
<p>{{$.trim(' oops! ')}}</p>
<script id='part' type='text/ractive'> 
<img src='/img/{{id}}.jpg'/> 
<p>{{title}}</p> 
</script> 
9 
Шаблон. Partials. 
Инициализация partial
<script id='tmpl' type='text/ractive'> 
<div class='gallery'> 
{{#items}} {{>part}} {{/items}} 
</div> 
</script> 
10 
Шаблон. Partials. 
Вставка в шаблон
<div class='gallery'> 
<img src='/img/cat.jpg'/> 
<p>Кошка</p> 
<img src='/img/dog.jpg'/> 
<p>Собака</p> 
</div> 
11 
Шаблон. Partials. 
Результат выполнения
 Parallel DOM 
 Фрагменты: 
● Элемент 
● События 
● Descriptor 
12 
Ractive. Под капотом.
Данные
 Нативный POJO 
 Двухсторонний data-binding 
 Keypath зависимости 
14 
Данные. Какие они?
// text 
<input value='{{user.name}}'> 
<p>{{user.name}}</p> 
// checkbox 
<input type='checkbox' checked='{{yes}}'> 
Ответ: {{yes ? 'Да' : 'Нет'}} 
15 
Данные. Data-binding.
Ручная установка 
// Set 
var colors = ['red','gold','green']; 
ractive.set('colors', colors); 
// Array mutator method 
colors.push('smoky'); 
16 
Данные. Установка значения.
«Don't worry, we're not modifying Array.prototype. 
(What do you think this is, Ember? :-)» 
- docs.ractivejs.org 
17 
Данные. Array.
var ractive = new Ractive({ 
magic: true 
}); 
18 
Данные. Магия... 
…о, нет! Оно работает само!
 Dependency graph 
 Prototype chain injection для Array mutators 
 ES5 accessors через Object.defineProperty 
 Не 'dirty checking' на каждый $scope.$digest() 
19 
Ractive. Под капотом.
Анимация и SVG
Использование анимации 
<div sytle='height:{{height}}%'></div> 
ractive.animate('height', 100); 
20% 
100% 
21 
Анимация. Основное.
Стандартные функции 
ractive.animate('height', 50, { 
easing: 'easeOut' 
}); 
22 
Анимация. Ослабление.
Custom easing 
Ractive.easing.elastic = function (pos) { 
return -1*Math.pow(4,-8*pos)* 
Math.sin((pos*6-1)*(2*Math.PI)/2)+1; 
} 
23 
Анимация. Ослабление.
ractive.animate('users', data, { 
duration: 300, // default 400 
step: function (t, value) { 
// По завершению витка 
}, 
complete: function (t, value) { 
// По завершению анимации 
} 
}); 
24 
Анимация. Дополнительно
<svg> 
<rect width='{{x}}' height='{{y}}'/> 
<text x='{{x/2}}' y='{{y/2}}'> 
{{Math.round(x * y)}} px² 
</text> 
</svg> 
// Приводим в действие 
ractive.animate({x: 300, y: 200}); 
25 
SVG. Пример.
 SVG из коробки 
 Анимация с requestAnimationFrame() 
 До 72 свойств одновременно 
26 
Анимация. Итого.
Директивы
Инициализация компонента 
Ractive.components.user = Ractive.extend({ 
template: '<p>{{name}}</p>', 
data: { name: 'Rich' } 
}); 
28 
Директивы. Компоненты.
Использование в шаблоне 
<div class='info'> 
// Директива с параметрами 
<user name='{{name}}' /> 
</div> 
29 
Директивы. Компоненты.
Проксирование событий 
<a on-click='like'>Нравится!</a> 
ractive.on('like', function (event) { 
alert('Я знал, что тебе понравится!'); 
}); 
30 
Директивы. Атрибуты.
Transition эффект 
<div intro='fade'>Плавно появится</div> 
<div outro='fade'>Плавно исчезнет</div> 
31 
Директивы. Атрибуты.
Наблюдатели
var ractive = new Ractive({ 
data: { 
people: [ 
{ id: 1, name: 'Игнат' }, 
{ id: 2, name: 'Олег' } 
] 
} 
}); 
25 
Наблюдатели. Пример.
// Инициализация 
ractive.observe('people.*', 
function(new, old, keypath) { 
// При изменении 
}); 
34 
Наблюдатели. Пример.
Промисы
36 
Промисы. Где-то уже видел... 
ractive.set('num',1).then(function() { 
// После полного завершения set 
alert( 'Значение установлено!' ); 
});
Спасибо! 
Контакты: 
● efim.solovyev@gmail.com 
● facebook.com/kystkysto 
Документация: 
● docs.ractivejs.org 
Tutorial: 
● learn.ractivejs.org

More Related Content

PDF
#13 "Управление состоянием в Redux" Роман Сальников
PDF
Magento - Антон Капля
PPTX
Все дороги ведут в Checkout
PPTX
Индексирование в Magento
PDF
По-настоящему ВИЗУАЛЬНОЕ построение лендинг-страниц на WP Gutenberg!
PPTX
Реализация шаблонов корпоративных приложений в Magento
PPTX
Как мы переходили на sails.js
PDF
Эволюция сервисов видео монетизации Unity Ads и сервиса реплей-шеринга Everyp...
#13 "Управление состоянием в Redux" Роман Сальников
Magento - Антон Капля
Все дороги ведут в Checkout
Индексирование в Magento
По-настоящему ВИЗУАЛЬНОЕ построение лендинг-страниц на WP Gutenberg!
Реализация шаблонов корпоративных приложений в Magento
Как мы переходили на sails.js
Эволюция сервисов видео монетизации Unity Ads и сервиса реплей-шеринга Everyp...

Similar to "Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17 (19)

PDF
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
PDF
Рендеринг может больше: vue.js vs React, Андрей Солодовников
PDF
YaC 2013 Notes
PPT
JavaScript-библиотека
PPTX
I tmozg js_school
PDF
basis.js - почему я не бросил разрабатывать свой фреймворк
PDF
Vuejs composition API
PDF
Изоморфный JavaScript — будущее уже здесь
PDF
Опыт разработки эффективного SPA
PDF
Инструментируй это
PDF
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
PDF
DOM-шаблонизаторы – не только "быстро"
PDF
Основы DHTML.
PPTX
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
PPT
jQuery: быстрая разработка веб-интерфейсов на JavaScript
PDF
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
PPT
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
PDF
React со скоростью света: не совсем обычный серверный рендеринг
PDF
C# Web. Занятие 12.
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Рендеринг может больше: vue.js vs React, Андрей Солодовников
YaC 2013 Notes
JavaScript-библиотека
I tmozg js_school
basis.js - почему я не бросил разрабатывать свой фреймворк
Vuejs composition API
Изоморфный JavaScript — будущее уже здесь
Опыт разработки эффективного SPA
Инструментируй это
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
DOM-шаблонизаторы – не только "быстро"
Основы DHTML.
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
jQuery: быстрая разработка веб-интерфейсов на JavaScript
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
React со скоростью света: не совсем обычный серверный рендеринг
C# Web. Занятие 12.
Ad

More from MoscowJS (20)

PDF
Александр Русаков - TypeScript 2 in action
PDF
Виктор Розаев - Как не сломать обратную совместимость в Public API
PDF
Favicon на стероидах
PDF
E2E-тестирование мобильных приложений
PDF
Reliable DOM testing with browser-monkey
PDF
Basis.js - Production Ready SPA Framework
PDF
Контекст в React, Николай Надоричев, MoscowJS 31
PDF
Верстка Canvas, Алексей Охрименко, MoscowJS 31
PDF
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
PDF
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
PDF
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
PDF
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
PDF
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
PDF
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
PDF
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
PDF
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
PDF
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
PDF
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
PDF
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
PDF
"Доклад не про React", Антон Виноградов, MoscowJS 27
Александр Русаков - TypeScript 2 in action
Виктор Розаев - Как не сломать обратную совместимость в Public API
Favicon на стероидах
E2E-тестирование мобильных приложений
Reliable DOM testing with browser-monkey
Basis.js - Production Ready SPA Framework
Контекст в React, Николай Надоричев, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
"Доклад не про React", Антон Виноградов, MoscowJS 27
Ad

"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17