2010-02-25 17 views
8

Tengo una selección que se llena según la selección en una selección diferente Para hacer esto, hice lo que se recomienda en Railscast # 88 en 'Dynamic Select Menus'.Cómo hacer un parcial desde javascript

Pero ahora necesito hacer un parcial, pasando el valor seleccionado en cada una de esas selecciones. No puedo averiguar cómo simplemente activar una llamada a un método desde el evento: onchange en la selección, así que estoy pensando que necesito llamar a render: partial desde el manejador de javascript que detecta el evento de cambio seleccionado. Pero no puedo entender cómo. He intentado lo siguiente en el método de Javascript (en el archivo de .js.erb), pero no funciona como se esperaba:

function staffSelected() { 
    $('date_area').show(); 
    <% render :partial => "calendar" -%> 
} 

Alguien tiene una buena solución?

+2

Um, bueno, por un lado, y esto es realmente sólo para empezar , esa línea de erb no está produciendo nada porque debería ser '<% =' en lugar de '<%'. Más allá de eso, creo que vas a tener que publicar el contenido de ese parcial, ser más específico sobre el comportamiento que estás buscando. – tfwright

Respuesta

5

No se puede procesar una parte parcial de JavaScript para detectar eventos de cambio. Ruby está del lado del servidor, y JavaScript es del lado del cliente. Para cuando se ejecuta su JavaScript, su Ruby ya ha sido analizado en HTML normal.

Su mejor opción es hacer lo siguiente:

utilizar un control de AJAX (hay Prototipo/los scriptaculous) para que alcance su servidor en el evento onchange. Su servidor puede enviar de vuelta RJS para actualizar las otras listas desplegables, o, puede devolver el JSON estándar y puede rellenar las otras listas desplegables manualmente en el método onSuccess de la llamada AJAX.

+0

Oh, wow, ni siquiera entendí que esto era un archivo estático; Pensé que lo estaban golpeando varias veces. – Matchu

+0

Creo que es un archivo estático. La pregunta es un poco vaga en ese aspecto. –

+0

Ah sí, en un archivo estático. – 99miles

8

Creo que esto es lo que estás buscando. Estoy haciendo que el parcial dentro de un DIV con "colores" ID, el parcial se prestarán únicamente si el valor del botón de opción seleccionado es rojo:

<script language="javascript" type="text/javascript"> 
jQuery(function($){ 
    $('#radio-buttons input[type=radio]').click(function() { 
    if ($(this).attr("value") === "red") { 
     $("#colors").html('#{escape_javascript(render :partial => "colors")}'); 
    } 
    }); 
}); 
</script> 
+0

Lo probé. Simplemente imprima # {escape_javascript (render: partial => "")} en la página como texto. – Bongs

+2

@Bongs Se supone que va a un archivo .erb para que el ruby, # {escape_javascript (render: partial => "")}, se sustituya adecuadamente en lugar de interpretarse como un literal de cadena. – jeconner

+1

Algunas cosas importantes. Incluso en un archivo .erb necesitaría envolver su cadena en <%= %>, y asegurarse de usar comillas dobles. Ruby no hace interpolación de cadenas con comillas simples. Esto también solo aparecerá una vez. La pregunta claramente está buscando renderizar en una acción de javascript. votado – TheJKFever

Cuestiones relacionadas