Статьи

Использование CoffeeScript в Rails

Впервые выпущенный в 2009 году и все еще находящийся в постоянном развитии, CoffeeScript — это альтернативный синтаксис для написания JavaScript, который быстро набирает популярность. Поскольку CoffeeScript компилируется до JavaScript (в отличие от ассемблера или другого байт-кода, такого как многие языки), он уже используется в браузерах, поддерживающих JavaScript, и на платформах, таких как node.js.

Сегодня я покажу вам, как добавить CoffeeScript в приложение Rails — в этом случае мы продолжим работу над нашим «коротким» сокращением URL из моей серии « Построение вашего первого приложения Rails » — чтобы добавить базовый JavaScript-код с использованием CoffeeScript и Barista , жемчужина для добавления бесшовной поддержки CoffeeScript в приложения на Rails.

Начиная

Чтобы начать работу с Barista, нам сначала нужно добавить необходимые гемы в наш Gemfile . Следовательно, откройте указанный файл и добавьте:

 gem 'barista' 

Если вы используете Ruby 1.8.7 или ниже, вам, вероятно, потребуется также добавить гем JSON в ваш Gemfile как:

 gem 'json' 

Наконец, вам понадобится интерпретатор JavaScript для запуска компилятора CoffeeScript. Если вы работаете в OSX, оболочка Ruby (поставляется с coffee-script ) будет использовать встроенный системный интерпретатор, но если вы работаете на другой платформе, вы захотите проверить REECME ExecJS, которая просматривает доступные опции. Один простой вариант — встроить v8 в ваше приложение, добавив в ваш Gemfile :

 gem 'therubyracer', :require => nil 

Затем запустите следующее, что заставит компоновщик обновить гемы, сделав их доступными для вашего приложения Rails, а затем сгенерирует конфигурацию для barista:

 bundle install rails g barista:install 

Открыв config/initializers/barista_config.rb , вы должны увидеть набор опций, которые позволяют вам настроить работу barista — не стесняйтесь осмотреться. Далее мы начнем использовать Barista для добавления CoffeeScript в наше приложение.

Написание некоторого кода

Для этого поста мы собираемся сделать что-то относительно простое, используя CoffeeScript. Используя jQuery, мы встроим iframe для предварительного просмотра URL-адреса под текстовой записью.

Первое, что нам нужно сделать, это удалить существующие файлы JavaScript и заменить их jQuery. Для этого мы добавим следующее в наш Gemfile :

 gem 'jquery-rails' 

А затем запустите:

 bundle install rails g jquery:install 

Если он спрашивает о конфликте, ответьте «да», чтобы существующие файлы были перезаписаны (вы используете SCM, верно?). Это скажет Rails использовать jQuery вместо Prototype для вашего приложения.

Затем откройте app/coffeescripts/shorty.coffee в текстовом редакторе (вам, возможно, придется сначала создать папку) и добавьте следующий код:

 $(document).ready -> preview = $("#preview-url") $('#url_url').keyup -> current_value = $.trim @value if current_value is '' preview.hide().attr 'src', '' else preview.show().attr 'src', current_value 

Этот код является нашей реализацией. Когда мы изменяем значение текстовых полей URL, он автоматически обновляет iframe . Затем откройте application/views/layouts/application.html.erb и измените:

 <%= javascript_include_tag :defaults %> 

к

 <%= javascript_include_tag :defaults, 'shorty' %> 

Это скажет Rails также включить файл коротышки JavaScript (автоматически скомпилированный из вашего файла shorty.coffee на странице).

Наконец, нам нужно добавить фактический iframe на страницу. В новом представлении URL ( app/views/urls/new.html.erb ) добавьте следующий код внизу страницы:

 <iframe id='preview-url' style='width: 600px; height: 400px; display: none'></iframe> 

Примечание. Для демонстрации мы установили встроенный CSS. Как правило, вы делаете это в обычной таблице стилей CSS.

Наконец, сохраните все файлы и снова запустите веб-сервер, используя rails server .

Открыв браузер, вы теперь сможете посетить http://localhost:3000/ и страница должна загрузиться, как и ожидалось. Начните вводить текст, и вы увидите, что он автоматически показывает / скрывает URL-адрес, когда он пытается загрузить его как можно скорее. Как вы можете видеть, Barista автоматически позаботилась о компиляции файла CoffeeScript в JavaScript-эквивалент для нас в фоновом режиме и будет делать это всякий раз, когда файл изменяется.

Если вы откроете и посмотрите public/javascripts/shorty.js , вы увидите, что с помощью компилятора CoffeeScript Barista автоматически преобразовал приведенный выше код во что-то похожее на:

 /* DO NOT MODIFY. This file was compiled Wed, 13 Apr 2011 01:10:20 GMT from * /path/to/your/app/app/coffeescripts/shorty.coffee */ (function() { $(document).ready(function() { var preview; preview = $("#preview-url"); return $('#url_url').keyup(function() { var current_value; current_value = $.trim(this.value); if (current_value === '') { return preview.hide().attr('src', ''); } else { return preview.show().attr('src', current_value); } }); }); }).call(this); 

Проблемы отладки

Если вышеупомянутое не сработало для вас, есть несколько вещей, которые нужно проверить. Посмотрите журнал приложений и найдите сообщения об ошибках, связанных с бариста. Наиболее распространенные проблемы, которые вы найдете:

  • Компиляция не удалась из-за отсутствия компилятора
  • Если вы развертываете в другом месте (например, Heroku), вам, возможно, придется либо встроить интерпретатор, например V8 (через gem therubyracer ), либо зафиксировать сгенерированный JavaScript в своем хранилище.

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

Продолжая

Теперь, когда вы получили базовую поддержку, я предлагаю поехать самостоятельно и немного поиграть. Как вы можете видеть, поскольку CoffeeScript скомпилирован в JavaScript, мы можем использовать все наши существующие библиотеки, такие как jQuery, с минимальными усилиями, упрощая использование jQuery и вашего собственного JavaScript для:

  • Сделайте так, чтобы URL загружались только в том случае, если они «выглядят корректно» (например, текущая версия пытается просмотреть все)
  • Используйте таймер / другой метод обнаружения изменений, чтобы избежать его изменения каждый раз, когда мы вводим символ
  • Разверните URL-адреса, чтобы использовать что-то вроде Embed.ly для предварительного просмотра содержимого.

Чтобы узнать немного больше о CoffeScript, прочитайте превосходное интерактивное руководство на сайте CoffeeScript, чтобы понять, как он обрабатывает преобразования.

Если вы добавите дополнительные функции, прокомментируйте ниже и дайте нам знать, как вы поступили с этим / как вы нашли процесс.