2010-01-06 18 views
10

Estoy tratando de usar jQuery, y todo ha sido excelente, hasta ahora, cuando intento renderizar un parcial y anexarlo a un div. Aquí está cómo he establecido que:Rails, jQuery, archivos .js.erb, JS no ejecutados por el navegador

tengo una acción que responde a JS:

def index 
    @objects = Object.find(:all) 

    respond_to do |format| 
    format.js 
    end 
end 

Y una plantilla llamada index.js.erb con algunos javascript en ella:

alert("hello world"); 

Firebug devuelve una respuesta "text/javascript" que contiene:

alert("hello world"); 

Pero no aparece la ventana de alerta, ni una ny otro trabajo de JavaScript. Salí http://railscasts.com/episodes/136-jquery y estoy más o menos siguiendo. He intentado varias otras cosas, como el uso de .rjs en lugar de .erb y poner esto en mi plantilla:

page.alert("hello world"); 

pero me da exactamente el mismo resultado, y el navegador nunca se ejecuta la JS.

¿Alguien sabe por qué JavaScript no se está ejecutando?

Estoy ejecutando Rails 2.3.4.

+1

usted no parece que haya nada usando jQuery específica, pero al igual que una nota, los carriles se envía con Prototype, jQuery no. Consulte jRails si quiere cambiar. –

Respuesta

12

Tiene que llamar desde su vista o nunca se ejecutará.

un controlador ejemplo:

def index 
    @objects = Object.find(:all) 

    respond_to do |format| 
    format.js{ 
     render :text => "alert('hello')" 
    } 
    end 
end 

y un index.html.erb con:

<script type="text/javascript"> 
    $(function(){ 
    $.ajax({ url: '/controller', type: 'get', dataType:'script' }); 
    }); 
</script> 

reemplazar '/ controlador' con la URL real que ejecuta la acción del índice de ese controlador, de forma predeterminada para PostsController será '/ posts' y así sucesivamente ...

si te gustan los rjs, eliminas {} y todo en el controlador y creas un index.js.erb o index.rjs con:

page.alert("hello world") 

o:

page << "hello world" 
+0

I mi situación, no tengo una versión html de esta acción, es estrictamente para cargar páginas a través de ajax (interminable paginación). Por alguna razón, incluso cuando invoco render: text => "alert ('hello');" en mi bloque responder_, todavía no me avisan, pero Firebug dice que recibo una respuesta de texto/javascript con el contenido correcto. – a10s

+4

Bueno. resulta que olvidé dataType: 'script' en mi llamada ajax. Gracias por su ayuda, no lo hubiera atrapado solo. – a10s

+0

dataType: 'script' también me salvó cuando usé el complemento jQuery Form. Una vez que haya configurado js.erb correctamente, aún no se ejecutará como JavaScript sin él. ¡Gracias! – brokenbeatnik

Cuestiones relacionadas