2010-09-07 19 views

Respuesta

25

que estaba buscando la manera correcta de hacerlo con Rails 3 pero ahora estoy seguro de que no hay un equivalente a periodically_call_remote en Rails 3. Para obtener exactamente la misma funcionalidad hecho con jQuery, he utilizado:

$(document).ready(
    function(){ 
    setInterval(function(){ 
     $('#mydiv').load('/controller/action'); 
    }, 3000); 
    }); 
+0

Tratando de implementar esto, pero con dificultades. Si inserto este código en application.js, incluyo javascript porfaults en el encabezado, y tengo un elemento DOM con id = 'mydiv', entonces debería vincularse automáticamente, ¿correcto? Además, ¿cómo puedo actualizar dinámicamente la URL, por ejemplo, si tengo un recurso anidado para que tenga que cargar '/ controller /: id/action', donde: id se establece dinámicamente? –

+0

Para hacer eso, simplemente agregue data-item-id a su elemento y cárguelo con .data() de jQuery y definitivamente puede hacer lo mismo con la URL. –

3

Utilice setInterval para ejecutar periódicamente una función que invoca una llamada AJAX. Si lo estuviera haciendo con jQuery, podría ser algo como:

var pollBackend = function() { 
    $.getJSON("/foo/bar/poll"); 
} 

setInterval(pollBackend, 5000); 

Esto intentará sondear la URL dada de datos JSON cada 5 segundos.

5

Si realmente quiere usarlo, entonces usted puede instalar el plugin legado que tiene este método:

http://github.com/rails/prototype_legacy_helper

Rails favorece EPU ahora.

Salida estos enlaces para obtener más información sobre la EPU en Rails 3:
http://railscasts.com/episodes/205-unobtrusive-javascript
http://www.simonecarletti.com/blog/2010/06/unobtrusive-javascript-in-rails-3/

lo hice un corto valoración crítica sobre esto en relación al prototipo y la etiqueta link_to_remote:
http://www.cowboycoded.com/2010/07/20/replacing-link_to_remote-with-ujs-in-rails-3-prototype/

¡Espero que esto ayude!

+0

Esto también podría ser de ayuda: http://railscasts.com/episodes/229-polling-for-changes – johnmcaliley

1

esto es lo que necesita para una llamada ajax periódica, reemplazar some_path con su propia ruta REST:

<%= javascript_tag do -%> 
$(document).ready(
    function(){ 
    setInterval(function(){ 
     $.ajax({ 
     url: "<%= some_path %>", 
     type: "GET", 
     dataType: "script" 
    }); 
    }, 60000); 
}); 
<% end -%> 

El archivo index.js.erb se vería así:

$('#mydiv').html("<%= escape_javascript(render(:partial => 'my_partial')) %>"); 
2

Si desea seguir utilizando prototype.js, por lo que puede hacer lo siguiente:

<%= content_for :js do %> 
    new Ajax.PeriodicalUpdater("mydiv", 
    "/controller/action", 
    { frequency: 5, 
     method: 'get' }) 
<% end %> 

Más sobre Ajax.PeriodicalUpdater here.