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

37
Ractive.js — реактивные усы Ефим Соловьев MoscowJS 27/11/14

Upload: moscowjs

Post on 04-Jul-2015

416 views

Category:

Software


6 download

DESCRIPTION

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

TRANSCRIPT

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

Ractive.js — реактивные усы

Ефим Соловьев MoscowJS 27/11/14

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

● Новостной портал - The Guardian

● Автор Rich Harris

Бриллиантовый век веб-разработки

2

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

● Нет DI контейнера или роутинга

● V в MVC

● По сути это:

● Шаблон

● Данные

3

Бриллиантовый век веб-разработки

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

● Шаблон

● Данные

● Анимация и SVG

● Директивы

● Наблюдатели

● Промисы

4

О чем сегодня?

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

Шаблон

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

6

Шаблон. Mustache.

{{#users}}

<a href='/users/{{@index+1}}'>{{name}}</a>

{{/users}}

Итерация в шаблоне

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

<a href='/users/1'>Алан</a>

<a href='/users/2'>Андрей</a>

<a href='/users/3'>Эмиль</a>

7

Шаблон. Mustache.

Результат выполнения

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

8

// Алгебра

<p>{{quantaty * price}}</p>

// Нативные функции

<p>{{Math.abs(-1)}}</p>

// Сторонние библиотеки

<p>{{$.trim(' oops! ')}}</p>

Шаблон. Выражения.

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

<script id='part' type='text/ractive'>

<img src='/img/{{id}}.jpg'/>

<p>{{title}}</p>

</script>

9

Шаблон. Partials.

Инициализация partial

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

<script id='tmpl' type='text/ractive'>

<div class='gallery'>

{{#items}} {{>part}} {{/items}}

</div>

</script>

10

Шаблон. Partials.

Вставка в шаблон

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

<div class='gallery'>

<img src='/img/cat.jpg'/>

<p>Кошка</p>

<img src='/img/dog.jpg'/>

<p>Собака</p>

</div>

11

Шаблон. Partials.

Результат выполнения

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

Parallel DOM

Фрагменты:

● Элемент

● События

● Descriptor

12

Ractive. Под капотом.

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

Данные

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

Нативный POJO

Двухсторонний data-binding

Keypath зависимости

14

Данные. Какие они?

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

// text

<input value='{{user.name}}'>

<p>{{user.name}}</p>

// checkbox

<input type='checkbox' checked='{{yes}}'>

Ответ: {{yes ? 'Да' : 'Нет'}}

15

Данные. Data-binding.

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

Ручная установка

// Set

var colors = ['red','gold','green'];

ractive.set('colors', colors);

// Array mutator method

colors.push('smoky');

16

Данные. Установка значения.

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

«Don't worry, we're not modifying Array.prototype.

(What do you think this is, Ember? :-)»

- docs.ractivejs.org

17

Данные. Array.

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

var ractive = new Ractive({

magic: true

});

18

Данные. Магия...

…о, нет! Оно работает само!

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

Dependency graph

Prototype chain injection для Array mutators

ES5 accessors через Object.defineProperty

Не 'dirty checking' на каждый $scope.$digest()

19

Ractive. Под капотом.

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

Анимация и SVG

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

Использование анимации

<div sytle='height:{{height}}%'></div>

ractive.animate('height', 100);

20%

100%

21

Анимация. Основное.

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

Стандартные функции

ractive.animate('height', 50, {

easing: 'easeOut'

});

22

Анимация. Ослабление.

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

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

Анимация. Ослабление.

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

ractive.animate('users', data, {

duration: 300, // default 400

step: function (t, value) {

// По завершению витка

},

complete: function (t, value) {

// По завершению анимации

}

});

24

Анимация. Дополнительно

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

<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. Пример.

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

SVG из коробки

Анимация с requestAnimationFrame()

До 72 свойств одновременно

26

Анимация. Итого.

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

Директивы

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

Инициализация компонента

Ractive.components.user = Ractive.extend({

template: '<p>{{name}}</p>',

data: { name: 'Rich' }

});

28

Директивы. Компоненты.

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

Использование в шаблоне

<div class='info'>

// Директива с параметрами

<user name='{{name}}' />

</div>

29

Директивы. Компоненты.

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

Проксирование событий

<a on-click='like'>Нравится!</a>

ractive.on('like', function (event) {

alert('Я знал, что тебе понравится!');

});

30

Директивы. Атрибуты.

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

Transition эффект

<div intro='fade'>Плавно появится</div>

<div outro='fade'>Плавно исчезнет</div>

31

Директивы. Атрибуты.

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

Наблюдатели

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

var ractive = new Ractive({

data: {

people: [

{ id: 1, name: 'Игнат' },

{ id: 2, name: 'Олег' }

]

}

});

25

Наблюдатели. Пример.

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

// Инициализация

ractive.observe('people.*',

function(new, old, keypath) {

// При изменении

});

34

Наблюдатели. Пример.

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

Промисы

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

36

ractive.set('num',1).then(function() {

// После полного завершения set

alert( 'Значение установлено!' );

});

Промисы. Где-то уже видел...

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

Контакты:

[email protected]

● facebook.com/kystkysto

Документация:

● docs.ractivejs.org

Tutorial:

● learn.ractivejs.org

Спасибо!