Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ember.js - ответ на почти все вопросы

fwdays
April 29, 2014

Ember.js - ответ на почти все вопросы

Андрей Листочкин

fwdays

April 29, 2014
Tweet

More Decks by fwdays

Other Decks in Programming

Transcript

  1. Привет, я Андрей! Программирую на чем угодно, люблю JavaScript и

    веб-технологии Соведущий Frontend UA Hangout Архитектор в очках и с бородой
  2. Идея - 2011 Run Loop - SprouteCore MVC - Cocoa

    Logic-less Templates + Helpers - Handlebars Data-binding - Metamorph Convention over Configuration - Rails
  3. Идея - 2011 Run Loop Cocoa MVC Logic-less Templates +

    Helpers Data-binding Convention over Configuration
  4. Идея - 2013 Run Loop Cocoa MVC Logic-less Templates +

    Helpers Data-binding Convention over Configuration Routing and Application State Data Access Components
  5. URL Смена URLа - событие URL - модуль URL -

    глобальное состояние
  6. URL var PostsRoute = Ember.Router.extend({ model: function () { return

    this.store.find('post'); } }); var PostsController = Ember.ArrayController.extend({ … });
  7. URL <ul> {{! posts.hbs }} {{#each post in model}} <li>

    {{#link-to 'post' post}} {{post.title}} {{/link-to}} </li> {{/each}} </ul> {{outlet}}
  8. URL var PostRoute = Ember.Router.extend({ model: function (params) { return

    this.store.find('post', params.post_id); } }); var PostController = Ember.ObjectController.extend({ … });
  9. 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')
  10. URL var PostsRoute = Ember.Router.extend({ model: function () { return

    this.store.find('post'); } }); var PostsController = Ember.ArrayController.extend({});
  11. Объектная модель 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')
  12. Объектная модель 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'
  13. 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
  14. MVC

  15. Заблуждения Не может быть встроен, все или ничего Не имеет

    DI Нельзя тестировать Сложно начинать Монолитный
  16. Angular JS Routing / Nested Views Консистентное API Простые компоненты

    Меньше граблей Большие Open-Source проекты Angular 2.0 догонит Эмбер по ряду пунктов :) но будет несовместим с Angular 1.x :(
  17. Backbone + React/OM сравнимая с HTMLBars производительность общая структура проекта,

    не “островки архитектуры в море плохого кода” Эмбер начинают использовать с персистентными структурами данных
  18. Не повторяет ошибок других Принимает решения за вас BB Reasonable

    Defaults for 95% case BB ng DI с барьерами ng Понятные директивы ng Одноразовая загрузка данных all Свой рендерринг-пайплайн Knockout ng
  19. Компании 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
  20. ?