2009-10-25 8 views
33

Tengo una carriles de crear una acción que envían de vuelta algunos jQuery en un archivo:¿Cómo enviar de vuelta js.haml en los carriles

create.js.erb

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

he empezado a utilizar HAML y quiero saber cómo debería convertir esto. ¿Puedo usar js.haml? En caso afirmativo, ¿cómo debería ser el marcado?

Respuesta

69

En realidad, devolver JS en HAML es bastante fácil, solo use el: filtro simple y encierre todo lo que desee evaluar en # {}.

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

No utilice el filtro: javascript ya que encerrará todo en una etiqueta que no es necesaria.

Si necesita usar algo de lógica, simplemente ponga: plain dentro de la anidación.

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

Lo sentimos ERB.

+12

Tenga en cuenta que ': plain' no es necesario en las últimas versiones de haml. – ocodo

+0

Todavía obtengo html sin procesar usando rails 3 y haml 3.1.7 –

3

Haml's realmente significa generar HTML. Podría, en teoría, usar create.js.haml, pero ERB tiene mucho más sentido cuando escribe Javascript.

+8

¿Le explico por qué usar ERB tiene "mucho más sentido" cuando escribe Javascript? Considero que HAML es bueno, más limpio y también funciona con Coffeescript. ty – Florin

+2

@Florin Porque Haml está diseñado específicamente para la sintaxis de HTML y XML. Cuando genera algo más con él, necesita hacer mucho escapando o de lo contrario trabajar en torno al hecho de que el resultado no es HTML o XML. El limpiador de Haml está bien, pero solo para HTML/XML. –

+1

no se requiere escapatoria si puede usar filtros como: javascript o: simple, consulte la respuesta aceptada anteriormente. – Florin

0

En un js.haml se vería algo así como

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

Nota del HAML! = Sintaxis que impide que el texto generado de ser HTML escapó. Estoy de acuerdo en que ERB se adapta mejor aquí, pero para mantener la coherencia, es posible que desee seguir el camino de HAML.

1

Parece que no necesita el! = En frente de cada línea. Lo siguiente funciona bien para mí. Estoy usando Rails 3 y la última versión de HAML

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