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

Как отправить обратно js.haml в рельсах

У меня есть рельсы, создающие действие, которые отправляют обратно некоторый jquery в файл:

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? Если да, то какова должна быть разметка?

4b9b3361

Ответ 1

На самом деле, возвращение 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.

Ответ 2

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

Ответ 3

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

$('#comments_table_header').after('#{escape_javascript(render :partial => 'row', :locals => { :comment => @comment })}');

Ответ 4

В js.haml он выглядел бы как

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

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