2010-08-05 24 views
6

La funcionalidad que planeo hacer es insertar algunos elementos de formulario dependiendo de un número elegido de una etiqueta de selección.hacer un parcial desde jquery y haml

Tengo una etiqueta de selección llamada number_of_passengers, y planeo agregar dinámicamente nuevos campos de pasajeros para el número elegido. Digamos que selecciono 2 de number_of_passengers, luego 2 formularios deben aparecer en un fieldset. estas formas contienen el nombre, edad, etc. peso

Probé tras esto:

call a rails function from jquery?

y simplemente convertir a Haml-hablar pero me da errores cada vez que use el: javascript etiqueta. Además no creo que pueda "escapar" de la etiqueta JavaScript una vez que estoy en ella

:javascript 
    $('#number_of_passengers').change(function() { 
    var $num_of_passengers = $(this).val(); 
    for($i=0; $i<$num_of_passengers;$i++) { 
     $('.passenger-info ul').append('<%= escape_javascript(render :partial => "new_passenger", :locals => {:booking => @booking }) %>'); 
    } 
    }) 

también ya que estoy en un form_for, ¿cómo puedo pasar la variable @booking a nivel local? Parece realmente complicado y estoy planeando hacer las cosas sucias 20 veces (20 pasajeros máximo) y luego esconderlos/mostrarlos dependiendo del número seleccionado. Pero eso es muy sucio, ¿no crees?

sintaxis

Respuesta

3

i se las arregló para hacer esto añadiendo:

respond_to do |format| 
    format.js { render :partial => "new_passenger" } 
end 

por lo que incluso si la solicitud se encontraba en js, se devolverá un html parcial. Nifty

+0

¿Alguna vez ha intentado mi respuesta? En caso de que no fuera claro: estaba usando la interpolación erb-style dentro de haml. Pero me alegro de que haya encontrado algo que funcionó. – nathanvda

+0

Estoy tratando de entender qué lo hiciste aquí, también interesado en renderizar algo de HTML basado en lo que hay dentro de un javascript condicional. ¿Dónde existe "new_passenger"? Y tu respuesta; dónde colocaste este código? – Tass

+0

new_passenger existe en la misma carpeta de visualización que el controlador, por lo tanto mi caso, bookingscontroller lo llamó así que estaba en la aplicación/views/bookings – corroded

0

rieles cambia todo el tiempo, pero no esta

render :partial => "new_passenger", :locals {:booking => @booking }) 

debe ser

render :partial => "new_passenger", :locals => {:booking => @booking }) 

se puede escapar javascript dentro del bloque javascript porque usted está evaluando las etiquetas rubí.

¿Qué mensajes de error está recibiendo?

La última parte de su pregunta no está claro para mí, pero es esto lo que está buscando:

- form_for @user do |f| 
    # f.object is equal to @user 
+0

Hola, gracias por su respuesta. Me dejo atrapado por una enfermedad. De todos modos, arreglé el error tipográfico, pero todavía estoy perplejo. Estaré editando la pregunta un poco y le mostraré el problema – corroded

12

Para obtener la interpolación de trabajo que tiene que hacer algo como

!= "$('.passenger-info ul').append('#{escape_javascript(render :partial => 'new_passenger', :locals => {:booking => @booking })}'); 

tan simple dijo: agregue el != al comienzo de la línea, e incluya la cadena entre comillas dobles.

Tu pregunta sobre @booking: Te sugiero que investigue algunos ejemplos de formularios anidados para que quede más claro para ti (por ejemplo, this y this railscast).

+0

hmm ¡gracias! ¿Qué significa el! =? Solo marcaré esto por ahora y verifico el futuro porque acabo de usar un js codificado (inserté el html de forma manual ... sucio pero funciona). se refactorizará pronto aunque – corroded

+0

El '! =' significa unescape HTML, por lo que insertará la cadena de rubíes tal cual, sin escapar de ella. A diferencia del '' 'normal que evalúa y escapa de la cadena, para una inclusión segura en HTML. Más aquí: http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html # unescaping_html – nathanvda

+1

Aún más fácil ... use el filtro: plain (no: javascript). – Karl

Cuestiones relacionadas