2009-10-25 2 views
33

У меня есть рельсы создать действие, которое посылают назад некоторые JQuery в файле:Как отправить обратно js.haml в рельсах

create.js.erb

var appearance = $("<%= escape_javascript(render(:partial => @appearance)) %>").effect("highlight", {color: '#E6ff00'}, 2000); 
$("#sortable").append(appearance); 
$("#new_appearance")[0].reset(); 

Я начал использовать HAML и хочу знать, как я должен это преобразовывать. Могу ли я использовать js.haml? Если да, то какова должна быть разметка?

ответ

69

Фактически, возвращение JS в HAML довольно просто, просто используйте фильтр: plain и приложите все, что вы хотите оценить в # {}.

:plain 
    var appearance = $("#{escape_javascript(render(:partial => @appearance)}").effect("highlight", {color: '#E6ff00'}, 2000); 
    $("#sortable").append(appearance); 
    $("#new_appearance")[0].reset(); 

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

Если вам нужно использовать некоторую логику, просто поместите: plain внутри гнездования.

- if params[:printing] 
    :plain 
    $('#print-view').html("#{escape_javascript(render 'print_preview')}"); 

Извините ERB.

+12

Обратите внимание, что ': plain' не требуется в последних версиях haml. – ocodo

+0

Я все еще получаю необработанный html с помощью рельсов 3 и haml 3.1.7 –

3

Haml действительно предназначен для генерации HTML. Теоретически вы можете использовать create.js.haml, но ERB имеет гораздо больше смысла, когда вы пишете Javascript.

+8

Уход за разъяснением, почему использование ERB делает «гораздо более понятным» при написании Javascript? Я нахожу HAML хорошим, чистым и работает с Coffeescript. ty – Florin

+2

@Florin Поскольку Haml разработан специально для синтаксиса HTML и XML. Когда вы генерируете что-либо еще с ним, вам нужно слишком много избегать или иным образом работать над тем, что вывод не является HTML или XML. Haml's Cleaner все в порядке, но только для HTML/XML. –

+1

не требуется экранирование, если вы можете использовать фильтры, такие как: javascript или: plain, см. Принятый ответ выше. – Florin

0

В js.haml это будет выглядеть как

!= "var appearance = $('<%= escape_javascript(render(:partial => @appearance)) %>').effect('highlight', {color: '#E6ff00'}, 2000);" 
!= "$('#sortable').append(appearance);" 
!= "$('#new_appearance')[0].reset();" 

Обратите внимание на HAML! = Синтаксис, который предотвращает сгенерированный текст от HTML убежал. Я согласен с тем, что ERB лучше подходит для вас, но для согласованного пакета вы все равно можете пойти по пути HAML.

1

Ну, похоже, вам не нужно! = Перед каждой линией. Следующие работы для меня просто прекрасны. Im с использованием Rails 3 и последней версии HAML

$('#comments_table_header').after('#{escape_javascript(render :partial => 'row', :locals => { :comment => @comment })}'); 
Смежные вопросы