2009-10-25 10 views
33

Mam szyn tworzą działania, które odesłać trochę jQuery w pliku:Jak odesłać js.haml w szynach

create.js.erb

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

I zaczęła używać haml i chcę wiedzieć, jak powinienem to zmienić. Czy mogę użyć js.haml? Jeśli tak, to jak powinien wyglądać znacznik?

Odpowiedz

69

W rzeczywistości zwracanie JS w HAML jest całkiem proste, wystarczy użyć filtra: zwykłego i załączyć wszystko, co ma być ocenione w # {}.

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

nie wolno używać: JavaScript filtra, jak to wszystko ująć w tagu, który jest niepotrzebny.

Jeśli potrzebujesz użyć jakiejś logiki, po prostu wpisz: plain wewnątrz nestingu.

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

Przepraszam ERB.

+12

Zauważ, że ': plain' nie jest potrzebne w najnowszych wersjach Haml. – ocodo

+0

Nadal dostaję surowy html za pomocą szyn 3 i haml 3.1.7 –

3

Haml naprawdę chciał wygenerować HTML. Można teoretycznie użyć create.js.haml, ale ERB ma więcej sensu, gdy piszesz Javascript.

+8

Dbasz, aby wyjaśnić, dlaczego korzystanie z ERB ma "dużo więcej sensu" podczas pisania Javascript? Uważam, że HAML jest dobry, czystszy i działa również z Coffeescript. ty – Florin

+2

@Florin Ponieważ Haml został zaprojektowany specjalnie dla składni HTML i XML. Gdy generujesz coś innego za pomocą tego, musisz wykonać zbyt dużo ucieczki lub w inny sposób pracować nad tym, że wynik nie jest HTML lub XML. Haml jest czystszy, ale tylko dla HTML/XML. –

+1

nie jest wymagane korzystanie z filtrów, takich jak: javascript lub: plain, patrz akceptowana odpowiedź powyżej. – Florin

0

W js.haml to wyglądać mniej więcej tak

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

Zanotować haml! = Składni, który zapobiega wygenerowany tekst z bycia HTML uciekł. Zgadzam się, że ERB lepiej tu pasuje, ale w przypadku stawki spójnej możesz nadal chcieć iść drogą HAML.

1

Wygląda na to, że nie potrzebujesz! = Przed każdą linią. Poniższe działa dla mnie dobrze. Im przy użyciu Rails 3 i najnowszej wersji HAML

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