Вопросы?

Вопросы!

Занятие 6

Использование ООП

  • Абстракция
  • Наследование
  • Состояние

Вопросы?

Составные части приложения
Компонент
  • Функциональная единица приложения
  • Инкапсулирует логику работы
  • Может быть переиспользован
  • Может включать в себя другие компоненты
  • Работает с "узлом" DOM дерева *
Примеры компонентов:
  • Календарь
  • Форма
  • Меню
  • Контрол формы
  • Кнопка
Обычный компонент включает:
  • .render
  • Конструктор принимающий зависимости и опции
  • Служебные методы
Пример компонента:

var BtnComponent = function(el, num, allowIncrement) {
  this.el = el;
  this.num = num;
  this.render();
  if (allowIncrement) {
    this.subscribeToClicks();
  }
}
BtnComponent.prototype.render = function() {
  this.el.innerHTML = '';
}

BtnComponent.prototype.subscribeToClicks = function() {
  this.el.addEventListener('click', function() {
    this.num = this.num + 1;
    this.render();
  }.bind(this));
}

                        
Router
Service
  • Вспомогательные фукнции и методы
  • Обертка и абстракция
  • StateFull / StateLess
Пример сервиса

var LsStore = function(prefix) {
  this.prefix = prefix;
} 
LsStore.prototype = {
  getItem: function(key) {
    return Promise.resolve(localStorage.getItem(this.prefix + '_' + key));
  },
  setItem: function(key, val) {
    return Promise.resolve(localStorage.setItem(this.prefix + '_' + key, JSON.stringify(val)));
  }
};
  
Application
Собрать все вместе и запустить

/* Page1Component , Page2Component , eventBus, Router, service1, service2 */
var router = new Router([
{ url: '/page1', onEnter: () => new Page1Component('.content', eventBus, service1) },
{ url: '/page2', onEnter: () => new Page2Component('.content', service2) }
], {
  eventBus: eventBus
});
                

Вопросы?

Использование сторонних библиотек

  • Имеют namespace или доступны как модуль
  • Подключаются в сборку или через CDN
  • Иногда имеют модульную струтуру и поддержку нестандартных сборок

Основные библиотеки

JQuery / Zepto

Основные разделы библиотеки:
  • Выборка элементов ( расширенные селекторы ) / манипуляция DOM
  • Работа с атрибутами / значениями / CSS / размерами элементов
  • AJAX
  • Работа с событиями / Promises
  • Работа с событиями ( подписа / отписка / тригеринг )
  • Анимации *
Выделяется:
  • Расширяемость ( много плагинов )
  • Решение проблем кроссбраузерности
  • Большое число примеров кода / решения
  • Не изменяет стандартные объекты
  • Null-object паттерн

Underscore / Lodash

Основные разделы библиотеки:
  • Работа с коллекциями/массивами
  • Работа с функциями (изменение контекста/работа с аргументами ...)
  • Работа с объектами ( выборка свойств, расширение и тп)
  • Дополнения для строк и чисел
  • Шаблонизатор и утилиты

D3 / Chart.js

Основные разделы библиотеки:
  • Визуализация данных (построение графиков/чартов)
  • Анимация
Примеры

Backbone.js

Основные разделы библиотеки:
  • Роутинг
  • MVC составляющие
  • Обертка для синхронизации данных
  • Событийная модель
  • Работа с коллекциями

JQuery UI

Основные разделы библиотеки:
  • Виджеты (календарь/ табы/ меню/ диалоговые окна / слайдеры )
  • Эффекты (расширение эффектов jquery)
  • Реализация drag-n-drop, resize, сортировки

UI Toolkits

Особенности:
  • Внешний вид "под десктоп"
  • Своя объектная/компонентная модель
  • Не рады работе с DOM
  • Задают структуру приложения

Фреймворки *

Вопросы?