SlideShare a Scribd company logo
Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Привет, я Андрей!
Программирую на чем угодно, люблю
JavaScript и веб-технологии
Соведущий Frontend UA Hangout
Архитектор в очках и с бородой
Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Холивары!
DOM + Эффекты + Ajax
jQuery
Prototype
DOMAssistant
MooTools
Модули + Widgets
Yahoo UI
Google Closure
jQuery UI
Ext JS
Desktop UI
MVC / MVP / MV*
Backbone
Knockout
Angular
Ember
React/Om
HTML
Ajax
Острова интерактива
Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Моностраничные приложения
Поле Боя MV*
Веб-клиенты
Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Ember.js   ответ на почти все вопросы - java script frameworks day 2014
2011
Yehuda Katz
C
V
M
C
V
M
DAO
DAO
UNIT TESTABLE
C
V
M
C
V
M
C
?
M
M
C
?
Logic-less Templates
2009
Chris Wanstrath - Mustache.rb
Jan Lehnardt - Mustache.js
<h1>Hello, {{username}}</h1>
Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Tom Dale
Идея - 2011
Run Loop - SprouteCore
MVC - Cocoa
Logic-less Templates + Helpers - Handlebars
Data-binding - Metamorph
Convention over Configuration - Rails
Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Идея - 2011
Run Loop
Cocoa MVC
Logic-less Templates + Helpers
Data-binding
Convention over Configuration
Идея - 2013
Run Loop
Cocoa MVC
Logic-less Templates + Helpers
Data-binding
Convention over Configuration
Routing and Application State
Data Access
Components
Ember.js   ответ на почти все вопросы - java script frameworks day 2014
MVC
Route
Model
Controller
View
Template
1. URL - царь горы
URL
Смена URLа - событие
URL
Смена URLа - событие
URL - модуль
URL
Смена URLа - событие
URL - модуль
URL - глобальное состояние
URL
https://myapp.com/posts/1
App.Router.map(function () {
this.resource('posts', function () {
this.resource('post', { path: ':post_id'});
});
});
URL
https://myapp.com/posts/1
PostsRoute
PostsController
<posts> {{outlet}}
PostRoute
PostController
<post>
URL
var Post = DS.Model.extend({
title: DS.attr('string')
body: DS.attr('string')
published: DS.attr('date')
});
URL
var PostsRoute = Ember.Router.extend({
model: function () {
return this.store.find('post');
}
});
var PostsController =
Ember.ArrayController.extend({ … });
URL
<ul> {{! posts.hbs }}
{{#each post in model}}
<li>
{{#link-to 'post' post}}
{{post.title}}
{{/link-to}}
</li>
{{/each}}
</ul> {{outlet}}
URL
var PostRoute = Ember.Router.extend({
model: function (params) {
return this.store.find('post', params.post_id);
}
});
var PostController =
Ember.ObjectController.extend({ … });
URL
{{! post.hbs}}
<h2>{{title}}</h2>
<p>{{format-date published}}</p>
<div>
{{body}}
</div>
2. Асинхронность
Promise
Promises
var PostRoute = Ember.Router.extend({
model: function (params) {
return this.store.find('post', params.post_id);
}
});
3. Dependency Injection
Dependency Injection
var PostRoute = Ember.Router.extend({
model: function (params) {
return this.store.find('post', params.post_id);
}
});
Dependency Injection
var Session = Ember.Object.extend({...});
App.register('session:main', Session);
App.inject('session:main', 'store', 'store:main');
App.inject('controller', 'session', 'session:main');
App.inject('route:app', 'session', 'session:main');
// внутри PostEditController
this.session.get('isLoggedIn')
4. Кодогенерация
URL
var PostsRoute = Ember.Router.extend({
model: function () {
return this.store.find('post');
}
});
var PostsController =
Ember.ArrayController.extend({});
5. Объектная модель
Объектная модель
Наследование
Миксины
Прокси-объекты
Зависимые свойства
Геттеры-сеттеры
Алиасы
...
Объектная модель
Uniform access principle:
obj1 = { inner: { prop: 'value' } };
obj2 = Ember.Object.create({
inner: { prop: 'value' }
});
Ember.get(obj1, 'inner.prop');
Ember.get(obj2, 'inner.prop');
obj2.get('inner.prop');
someOtherObject.get(computed.property')
Объектная модель
var Person = DS.Model.extend({
first: DS.attr('string'),
last: DS.attr('string'),
full: function () {
return this.get('first') + ' ' + this.get('last')
}.property('first', 'last')
});
tom.get('full') // => 'Tom Dale'
6. MVC
MVC
https://myapp.com/posts/1
PostsRoute
PostsController
<posts> {{outlet}}
PostRoute
PostController
<post>
MVC
Init
View
Templat
e
Model
Route
Controller
MVC
Init
View
Templat
e
Model
Route
Controller
MVC
Init
View
Templat
e
Model
Route
Controller
MVC
Init
View
Templat
e
Model
Route
Controller
MVC
Data
View
Templat
e
Model
Route
Controller
Controller View
MVC
Events
View
Templat
e
Model
Route
Controller
DOM
Actions
Actions
Actions
MVC
Model
Controller
Route
Application
Route
Route
Route Route
View
View View
View View
Model
Controller
Model
Controller
View
View View
View View
View
View View
View View
MVC
7. Компоненты
Компоненты
{{#my-tag param=value}}
…
{{/my-tag}}
{{! components/my-tag.hbs}}
... {{yield}} …
MyTagComponent = Ember.Component.extend
Angular's bi-directionally
bound isolate scope,
transcluded, element
restricted directives
Ember Components
За кадром
Поддержка тестирования
Инструменты
Ember Inspector - Chrome, Firefox
Ember-CLI
ember new myapp
Broccoli
ES6, HTMLBars, JSON API
Заблуждения
Не может быть встроен, все или ничего
Не имеет DI
Нельзя тестировать
Сложно начинать
Монолитный
А холивар?
голос из зала
Angular JS
Routing / Nested Views
Консистентное API
Простые компоненты
Меньше граблей
Большие Open-Source проекты
Angular 2.0
догонит Эмбер по ряду пунктов :)
но будет несовместим с Angular 1.x :(
Backbone + React/OM
сравнимая с HTMLBars производительность
общая структура проекта, не “островки
архитектуры в море плохого кода”
Эмбер начинают использовать с
персистентными структурами данных
Не повторяет ошибок других
Принимает решения за вас BB
Reasonable Defaults for 95% case BB ng
DI с барьерами ng
Понятные директивы ng
Одноразовая загрузка данных all
Свой рендерринг-пайплайн Knockout ng
Модель разработки -
PostgreSQL
Tilde, Yapp, Prototypal, Adepar, Instructure,
etc.
Релизы по расписанию
Компании
1. Apple
2. Google
3. Yahoo
4. Twitter
5. Microsoft
6. Groupon
7. Square
8. Zendesk
9. Ballanced
10. Nitrous.io
11. USPO
12. DoD
13. NBCNews
14. Netflix
Проекты
1. Discource
2. Ballanced
3. Travis CI
4. Ghost
Ember.js   ответ на почти все вопросы - java script frameworks day 2014
?

More Related Content

KEY
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
PPTX
Underscore js
PDF
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
PDF
WP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript Utils
PPTX
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
PPT
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
PPT
Толстая модель. История разработки ORM
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Underscore js
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
WP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript Utils
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
Толстая модель. История разработки ORM

What's hot (20)

PDF
Интуит. Разработка приложений для iOS. Лекция 3. Views
PDF
UWDC 2013, Yii2
PDF
Basis.js – «под капотом»
PPTX
Windows Azure and node js
PDF
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
PDF
UWDC 2013, Как мы используем Yii
PDF
DOM-шаблонизаторы – не только "быстро"
PDF
DevConf 2012 - Yii, его разработка и Yii2
PDF
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
PDF
GAE - плюсы/минусы/подводные камни
PDF
Быстро о быстром
PDF
Как построить DOM
ODP
Alexander Dymo - Barcamp 2009 - Faster Higher Sql
PDF
basis.js - почему я не бросил разрабатывать свой фреймворк
PDF
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
PPT
Вебинар "Оптимизация производительности мобильных веб-приложений"
PPTX
QA Fest 2015. Иван Пашко. XPath yourself. Tips & Tricks
PDF
2014 Jeeconf - Geb Spock
PDF
Sergey Chikuyonok Css Animation
PDF
Интуит. Разработка приложений для iOS. Лекция 3. Views
UWDC 2013, Yii2
Basis.js – «под капотом»
Windows Azure and node js
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
UWDC 2013, Как мы используем Yii
DOM-шаблонизаторы – не только "быстро"
DevConf 2012 - Yii, его разработка и Yii2
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
GAE - плюсы/минусы/подводные камни
Быстро о быстром
Как построить DOM
Alexander Dymo - Barcamp 2009 - Faster Higher Sql
basis.js - почему я не бросил разрабатывать свой фреймворк
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Вебинар "Оптимизация производительности мобильных веб-приложений"
QA Fest 2015. Иван Пашко. XPath yourself. Tips & Tricks
2014 Jeeconf - Geb Spock
Sergey Chikuyonok Css Animation
Ad

Viewers also liked (9)

PDF
Steps to Employment 2011 14 - staff training
PDF
The Magic of ECP
PDF
Ember.js - Назад в Будущее - Odessa JS 2014
DOC
George Boole and Truth
PPTX
Job seeking - SoftSkills - Scci'14
PPTX
Seeking A Job Guide Workshop
PPT
Barrack Obama
PPT
Job seeking strategies
PDF
Gower Walks
Steps to Employment 2011 14 - staff training
The Magic of ECP
Ember.js - Назад в Будущее - Odessa JS 2014
George Boole and Truth
Job seeking - SoftSkills - Scci'14
Seeking A Job Guide Workshop
Barrack Obama
Job seeking strategies
Gower Walks
Ad

Similar to Ember.js ответ на почти все вопросы - java script frameworks day 2014 (20)

PDF
Арсений Заречнев и Федор Шумов - Одностраничные приложения
PDF
Backbone js
PPT
Арсений Заречнев и Федор Шумов - Одностраничные приложения
PPTX
Опыт работы с фреймворком ASP.NET MVC
PPTX
Референсная архитектура приложения на ASP.NET MVC
PPTX
ASP.NET, MVC, ASP.NET MVC
PPTX
Railsclub 2012
PDF
Изоморфный JavaScript — будущее уже здесь
PDF
C# Web. Занятие 01.
PDF
Api devconf 2013
PPTX
RESTful API: Best practices, versioning, design documentation
PDF
C# Web. Занятие 11.
PDF
Стратегии масштабирования [NoBugs WTF PRO уровень]
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
PDF
Backbone.js Профилактика сколиоза
PDF
Зачем нужен EmberJS, если мне хвататет jQuery
KEY
Tequila - язык для продвинутой генерации JSON
PPTX
CiklumNetSat17032012SergeyKalinets- FubuMVC
PPTX
Fubu mvc -- нафига оно мне
PPTX
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Арсений Заречнев и Федор Шумов - Одностраничные приложения
Backbone js
Арсений Заречнев и Федор Шумов - Одностраничные приложения
Опыт работы с фреймворком ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
Railsclub 2012
Изоморфный JavaScript — будущее уже здесь
C# Web. Занятие 01.
Api devconf 2013
RESTful API: Best practices, versioning, design documentation
C# Web. Занятие 11.
Стратегии масштабирования [NoBugs WTF PRO уровень]
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
Backbone.js Профилактика сколиоза
Зачем нужен EmberJS, если мне хвататет jQuery
Tequila - язык для продвинутой генерации JSON
CiklumNetSat17032012SergeyKalinets- FubuMVC
Fubu mvc -- нафига оно мне
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk

Ember.js ответ на почти все вопросы - java script frameworks day 2014