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