SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

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

Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikov
yaevents
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
victor-yastrebov
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
Yandex
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
Technopark
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
DevDay
 

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

Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikov
 
Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"
 
Andrew Borisenko "Magic of Vue.js""
Andrew Borisenko  "Magic of Vue.js""Andrew Borisenko  "Magic of Vue.js""
Andrew Borisenko "Magic of Vue.js""
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
 
Организация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий КопачёвОрганизация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий Копачёв
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Survive with OOP
Survive with OOPSurvive with OOP
Survive with OOP
 
Grails & Groovy
Grails & GroovyGrails & Groovy
Grails & Groovy
 
Максим Ширшин "SVARX: фреймворк для семантической валидации форм"
Максим Ширшин "SVARX: фреймворк для семантической валидации форм"Максим Ширшин "SVARX: фреймворк для семантической валидации форм"
Максим Ширшин "SVARX: фреймворк для семантической валидации форм"
 
Maksim Shirshin
Maksim ShirshinMaksim Shirshin
Maksim Shirshin
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
Svg
SvgSvg
Svg
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
 
Выжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейВыжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим Гопей
 
Максим Ширшин "SVARX, или Борьба с большими формами"
Максим Ширшин "SVARX, или Борьба с большими формами"Максим Ширшин "SVARX, или Борьба с большими формами"
Максим Ширшин "SVARX, или Борьба с большими формами"
 

Mehr von MoscowJS

Mehr von MoscowJS (20)

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

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