2012-06-22 22 views
11

Este es el código que tengo actualmente:Interpolar rubí sentencia if en haml Javascript bloque

:javascript 
    // do something 
- if current_user.role? :client 
    :javascript 
     //do something else 

Es obviamente no muy limpio ya que estoy repitiendo el: javascript filtro haml. Me gustaría evitar eso, pero no sé cómo escribir correctamente una declaración "si" de Ruby dentro de un bloque HAML: javascript.

Sé cómo interpolar las variables con # {}, pero ¿cómo haces lo mismo para todo if/for/etc. declaraciones?

Respuesta

-3

Eso está muy bien.

La otra opción es que podría ponerlo en un .js.erb parcial y renderizarlo desde su vista de haml.

A continuación, puede simplemente hacer

// do something 
<% if condition == true %> 
    // do something else 
<% end %> 
3

Yo no lo he probado, pero me gustaría pensar que podría hacer

:javascript 
    // do something 
- if current_user.role? :client 
    ="//do something else" 

(igual que en el segundo ejemplo here.)

Por un período muy corto de javascript, también puedes probar

:javascript 
    // do something 
    #{current_user.role? :client ? "//do something else" : ""} 
-1

que he logrado esto a través de una llamada = yield :foot_scripts en mi diseño, a continuación, a continuación:

= if condition 
    - content_for :foot_scripts do 
    - render :partial => "page_specific_javascript" 

en mis puntos de vista - de esa manera puedo asegurar que el código JavaScript se ejecuta exactamente donde yo quiero que sea en el DOM (DESPUÉS de todo lo demás), y mantenerlo en un archivo separado, que es mucho más limpio. ¿Sacando un script de tus archivos de vista? ¡BUENO!

2

hago esto:

if(#{params[:param_to_check_for].blank? ? "true" : "false"}) 

En el caso anterior, la condición es params[:param_to_check_for].blank?.

Se hace el código JavaScript ya sea como: if(false) o if(true)

+1

Por qué es verdad una cadena , pero falso un booleano? – onebree

+0

@HunterStevens no hay una buena razón ... probablemente solo porque funcionó :) arreglado ahora. – Caleb

0

He interpolé la variable Rubí/HAML en JS explícita o truefalse para la condición JS así:

$("#cancel").click(function() { 
    if (#{ !!my_flag_variable }) 
    window.location.href = "./"; 
    else 
    $("#dialog").hide(); 
});