Come rispedire js.haml in binari
-
06-07-2019 - |
Domanda
Ho un'azione di creazione di rotaie che restituisce alcuni jquery in un file:
create.js.erb
var appearance = $("<%= escape_javascript(render(:partial => @appearance)) %>").effect("highlight", {color: '#E6ff00'}, 2000);
$("#sortable").append(appearance);
$("#new_appearance")[0].reset();
Ho iniziato a usare HAML e voglio sapere come dovrei convertirlo. Posso usare js.haml? In tal caso, come dovrebbe essere il markup?
Soluzione
In realtà, restituire JS in HAML è abbastanza semplice, basta usare il filtro: plain e racchiudere tutto ciò che si desidera valutare in # {}.
:plain
var appearance = $("#{escape_javascript(render(:partial => @appearance)}").effect("highlight", {color: '#E6ff00'}, 2000);
$("#sortable").append(appearance);
$("#new_appearance")[0].reset();
Non utilizzare il filtro: javascript poiché racchiuderà tutto in un tag che non è necessario.
Se devi usare un po 'di logica, inserisci semplicemente: plain all'interno del nesting.
- if params[:printing]
:plain
$('#print-view').html("#{escape_javascript(render 'print_preview')}");
Siamo spiacenti ERB.
Altri suggerimenti
Haml voleva davvero generare HTML. In teoria potresti usare create.js.haml
, ma ERB ha molto più senso quando scrivi Javascript.
Beh, sembra che non sia necessario! = davanti a ogni riga. Quanto segue funziona bene per me. Sto usando Rails 3 e l'ultima versione di HAML
$('#comments_table_header').after('#{escape_javascript(render :partial => 'row', :locals => { :comment => @comment })}');
In un js.haml sarebbe simile a
!= "var appearance = $('<%= escape_javascript(render(:partial => @appearance)) %>').effect('highlight', {color: '#E6ff00'}, 2000);"
!= "$('#sortable').append(appearance);"
!= "$('#new_appearance')[0].reset();"
Nota la sintassi HAML! = che impedisce al testo generato di essere sottoposto a escape HTML. Sono d'accordo sul fatto che ERB si adatti meglio qui, ma per la coerenza, potresti voler continuare su HAML.