- PVSM.RU - https://www.pvsm.ru -

10 причин начать использовать Follow.js

1) Полная документация на русском, покрытие юнит-тестами

2) Привычная работа с JSON в dot-нотации и легкий доступ к данным.
Т.е получение значения var settings = model('user.data.settings');
равнозначно записи в чистом JS var settings = user && user.data && user.data.settings !== undefined ? user.data.settings : null;
Вам больше не нужно заботится о проверке всех частей цепочки доступа к данным.

3) Малый вес библиотеки (~20 кб в минимизированном виде, в gzip будет совсем копейки).
Для сравнения вес других библиотек, решающих похожие задачи:

4) Используйте свой любимый фреймворк для работы с DOM и шаблонизатор (я рекомендую jQuery [4] + JSrender [5])

5) Отказ от захламления логикой в data-аттрибутах (пример из knockout: data-bind="value: myData()")
Связь с DOM-элементами по-прежнему через data-аттрибут (data-follow="my.data.here"), который содержит лишь цепочку (путь к данным в модели, который можно рассматривать как уникальный идентификатор).
Логика и всё поведение хранится в JS:

  • При обновлении данных приложения со стороны модели — триггеры через model.follow(chain, callback, [mode])
  • При обновлении DOM-элементов (обычно это элементы формы) — триггеры через Follow.link({match: 'selector', trigger: function(){}})

6) Все данные в модели явлются наблюдаемыми (observable). Можно оформить подписку на изменение одного или множества «цепочек» в модели.
К примеру, в knockoutjs чтобы создать лишь одну наблюдаемую переменную в модели используется ko.observable('default-value').
Создавая Follow.js, хотелось максимально следовать лозунгу jQuery — «write less, do more». Из этого вытекает пункт 7.

7) JavaScript очень гибкий язык с точки зрения синтаксиса и не пользоваться этим было бы глупо.
Именно поэтому при получении экземпляра модели нету необходимости писать new Follow.
Именно поэтому конструктор Follow возвращает объект модели (model) в виде функции, которая упрощает работу сразу с 3 вещами:

  • Получение данных (Getter) — вместо model.get('chain') пишем сразу model('chain')
  • Присвоение данных (Setter) — вместо model.set('chain', 'new-data') пишем model('chain', 'new-data')
  • Поскольку экземпляр модели — функция, мы можем изменить поведение этого объекта в контексте строки, т.е перегружаем метод toString(), поэтому alert(model) возвратит нам строковое представление модели (прозрачный вызов model.toJSON)

Конечно, подозреваю, многим традиционалистам ООП не понравится это якобы, сомнительное улучшение.

8) Простая интеграция с другими библиотеками и back-end частью вашего сервиса благодаря JSON-модели данных.
В любой момент работы приложения получаете текущее состостояние модели через model.toJSON([chain]) и отсылаете на сервер.

9) В любом паттерне при работе с данными, типа MVC иили MVVM, главная её часть — это работа с моделью.
Именно поэтому в Follow.js всё внимание уделено работе с моделью. Шаблонизация данных или работа с DOM не её забота.
Когда каждый инструмент решает свою задачу и при этом сочетается с другими это прекрасно.

10) Готовая интеграция «из коробки» с проектами, работающими на XSL/XML. Принцип работы предельно прост:

  1. В любом месте XML-документа формируете специально оформленные мапперы для сборки данных (XML)
  2. В XSL-документе вызываете шаблон, который обработает мапперы, сформирует JSON и прокинет данные на клиент (JS)

Исходники на GitHub [6]
Документация [7]

Автор: extensible


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/6226

Ссылки в тексте:

[1] Ember.js: http://emberjs.com/

[2] Backbone.js: http://backbonejs.org/

[3] Knockout.js: http://knockoutjs.com/

[4] jQuery: http://jquery.com/

[5] JSrender: https://github.com/BorisMoore/jsrender

[6] Исходники на GitHub: https://github.com/extensible/follow.js

[7] Документация: http://extensible.github.com/follow.js/docs/