Статьи

Совет: Введение в Sammy.js

Вы уже давно это видели с Google Reader, Gmail и совсем недавно на Facebook. Возможно, вы тоже хотели бы написать RESTful-JavaScript-приложения. Что ж, коллеги-разработчики, познакомьтесь с Sammy.js , крошечной платформой JavaScript, построенной на основе jQuery . Сэмми использует хеш URL (#), чтобы вы могли создавать одностраничные AJAX-приложения, отвечающие на кнопку возврата вашего браузера. Заинтересованы?

В этой статье я предоставлю краткий обзор фреймворка, а затем кратко продемонстрирую, каково это работать с Sammy.js , с надеждой соблазнить вас достаточно, чтобы рассмотреть его для своих проектов.


«Sammy.js легок как по размеру (<20 КБ), так и по размерам. Включите его в уже запущенные приложения».

Sammy.js собирается Аароном Куинтом , веб-разработчиком из Бруклина, Нью-Йорк. Его API смоделирован на основе популярной среды Ruby , Sinatra , и отлично подходит как для простых, так и для сложных приложений. В него легко войти, и его можно включить в существующие проекты. Это не предложение «все или ничего»; так что давайте посмотрим.

Sammy.js позволяет вам писать одностраничные приложения, очень похожие на Gmail. Вы можете поддерживать состояние вашего приложения с помощью URL-адреса без необходимости обновлять или изменять страницу. Существуют и другие JavaScript-фреймворки MVC, такие как SproutCore , которые, как правило, охватывают все. Но с Сэмми у вас есть легкая (~ 20 КБ) инфраструктура, способная вызывать несколько экземпляров одновременно (т.е. запускать несколько приложений в одном документе).


Установить Sammy.js довольно просто. sammy-0.5.4.min.js на страницу загрузки , возьмите копию и переместите sammy-0.5.4.min.js туда, где вы храните библиотеки вашего проекта (как правило, / js для меня). Для этой статьи я буду использовать версию 0.5.4, но вы можете попробовать sammy-latest.min.js . Вам также понадобится копия jQuery, по крайней мере v. 1.4.1. Как и в большинстве плагинов jQuery, важен порядок: jQuery, до Sammy.js, до вашего JavaScript. Я стараюсь размещать свой JavaScript внизу страницы, потому что он блокирует параллельную загрузку других элементов, создавая впечатление более медленной загрузки страницы. Пока что имеем:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
   <html lang=»en»>
   <head>
       <meta http-equiv=»Content-Type» content=»text/html; charset=utf-8″ />
       <title>Sammy.js Example</title>
   </head>
   <body>
    
       <div id=»content»></div>
    
       <script type=»text/javascript» src=»http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js»></script>
       <script type=»text/javascript» src=»js/sammy-0.5.4.min.js»></script>
       <script type=»text/javascript»>
        
           // your script goes here
            
       </script>
        
   </body>
   </html>

Теперь, чтобы начать кодирование нашего приложения. Проще говоря, я работаю на линии, что не самая лучшая практика. Добавить приложение Sammy.js так же просто, как присвоить его переменной, которую я называю ratPack. На нашей странице мы определили div с идентификатором «content», с которым будет работать наше приложение. Мы обозначаем это следующим образом:

Важность селектора элемента заключается в том, что в нашем документе может быть запущено несколько экземпляров Sammy.js, влияющих на разные элементы.


Sammy.js использует путь, определенный в хэше URL, и общие методы HTTP (get, post, put, delete), чтобы определить функцию обратного вызова для вызова. Они обычно известны как «маршруты». Вот некоторые примеры из Интернета:

В качестве примера мы набросаем приложение для почтового ящика. Давайте сначала настроим маршрут нашего приложения по умолчанию, который будет находиться в # / inbox.

Здесь вы можете заставить функцию обратного вызова делать все, что захотите. Поскольку я показываю входящие, я, вероятно, хотел бы сделать ajax-вызов и получить список сообщений. Однако ради простоты я просто собираюсь вернуть тег h1 . context.app.swap('') говорит Сэмми заменить содержимое моего содержимого div, а не просто добавлять к нему.

Чтобы заставить это работать в браузере, мы хотим запустить приложение, используя функцию готовности документа jQuery, и передать его по нашему начальному URL, как определено в приведенном выше маршруте.

Вот и все. Теперь мы сможем загрузить наш документ в браузер, приложение должно запуститься и перейти к нашей папке входящих сообщений.

Далее мы можем создать другой маршрут для обработки помеченных сообщений:

Сэмми использует синтаксис двоеточия var (: var), чтобы вернуть параметры, чтобы мы могли фильтровать наши сообщения. Опять же, я просто отображаю название лейбла.

До этого момента мы использовали только HTTP-метод get. Скажем, мы должны были создать форму и направить ее в # / compose:

Теперь мы можем настроить маршрут, чтобы принимать опубликованные данные и заставить Сэмми проанализировать их для нас.

Это основы. Простой API, достаточно мощный для больших и маленьких проектов. Если вы следуете вместе с кодом, мы можем добавить навигацию для удобства нажатия.

1
2
3
4
5
6
7
<div id=»nav»>
       <ul>
           <li><a href=»#/inbox»>inbox</a></li>
           <li><a href=»#/compose»>compose</a></li>
           <li><a href=»#/label/drafts»>drafts</a></li>
       </ul>
   </div>

Конечно, Sammy.js может предложить гораздо больше, чем просто определение маршрутов в приложении. Более опытные пользователи могут исследовать пользовательские события и пространства имен для приложений, управляемых событиями. Аарон пытается сохранить ядро ​​Sammy.js настолько тесным, насколько это возможно, но он также поставляется с множеством плагинов. Есть плагин заголовка, который позволяет вам легко установить заголовок документа для разных маршрутов. Существует несколько систем шаблонов, включая хамл и усы. Есть красивый конструктор форм и Sammy.Store, «абстрактный класс адаптера, который объединяет множество хранилищ данных в браузере в единый общий набор методов для хранения и извлечения данных».

Надеюсь, вам понравился этот быстрый взгляд на Sammy.js и вы готовы рассмотреть возможность его использования в своих приложениях. Давайте послушаем ваши мысли о Sammy.js в комментариях!

Оригинальный инструктор этого урока попросил удалить их имя из подписи.