Подтвердить что ты не робот

Могу ли я использовать CoffeeScript в представлениях, выполненных на render.js?

Что мне нужно сделать, чтобы я мог использовать CoffeeScript в представлениях Rails JS? Например:

def index
    format.js { render :layout => false } 
end

Что мне нужно сделать, чтобы Rails использовала index.js.coffee?

4b9b3361

Ответ 1

Он еще не поддерживается в 3.1. Вам нужно будет использовать Coffeebeans.


Обновление: теперь оно поддерживается в рельсах 3.2

Ответ 2

Ответ Джонни правильный. Если вы посмотрите на запрос на растяжение, связанный с CoffeeBeans, у вас есть dhh, говоря

Как только у нас есть быстрая, чистая реализация, она приветствуется в ядре. 3.2 - более вероятная цель.

Я кратко поговорил с Сэмом Стивенсоном и Джошем Пиком об этом в Railsconf, так как это была недостающая особенность, о которой люди спрашивали меня после моего обсуждения в CoffeeScript. В конце концов, Rails 3.1 сильно нажимает CoffeeScript по умолчанию; кажется странным, что есть места, где необходимо использовать чистый JS. Реакция Сэма заключалась в том, что это было бы неэффективно, потому что вам придется запускать компилятор CoffeeScript на каждом запросе страницы, даже в производстве. Это потому, что код вроде

<%= coffee_script_tag do %>
  alert "coffee script is #{verb}!"
<% end %>

создает интерполяцию ERB (а не интерполяцию CoffeeScript - неудачно, что оба используют один и тот же синтаксис), что потенциально дает другую последовательность кода CoffeeScript для каждого запроса. И нет способа сказать, из реализации coffee_script_tag, будет ли данный код одинаковым каждый раз (т.е. Есть ли интерполяция ERB или нет).

Теперь компилятор CoffeeScript работает очень быстро, но компиляция на JavaScript все равно добавит немного дополнительного времени для каждого запроса. Поэтому команда Rails не решалась поощрять практику.

Для повышения эффективности и избежания двусмысленности между интерполяциями ERB и интерполяциями CoffeeScript вы должны, вероятно, сохранить свой CoffeeScript где-нибудь (возможно, как файл .coffee в том же каталоге, что и ваше представление), и скомпилировать его на JavaScript с помощью рука.

Ответ 3

Теперь это работает в Rails 3.2. Например, у меня есть ресурс с именем book. Этот ресурс имеет файл в app/views/books/index.html.erb со следующим:

<%= link_to 'test me', new_book_path(color: 'blue'), remote: true %>

Затем у меня есть файл в app/views/books/new.js.coffee в ≈ со следующим кодом:

test = ->
  'this is a test'

console.log test()
console.log( "<%= params[:color] %>" )

Я вижу:

'this is a test'
'blue'

в моей консоли браузера.

Ответ 4

если вы не хотите устанавливать кофейные бобы, это своего рода быстрый и грязный способ сделать это, взломав эрб-выход немного:

<% 
require 'coffee-script'; 
def coffee_script; CoffeeScript.compile yield '' end %>
<script type="text/javascript">
<% compiled = coffee_script do |_erbout|%>
->
  console.log 'works! this part is coffeescript!'
<% end %>
<% _erbout.concat compiled %>
</script>