2012-05-29 12 views
9

Tengo dos alternativas para implementar ajax en una aplicación de Rails 3.Uso de .js.erb para Ajax en Rails 3 (jquery .js vs .js.erb)

1- Enlaza el evento en el envío usando jquery dentro del archivo viewaction.js o viewaction.js.coffee y administra el json devuelto para modificar cosas en el DOM.

2- Use la etiqueta remote => true en Rails y codifique un archivo llamado viewaction.js.erb para hacer las modificaciones en el DOM y use las variables de clase cargadas en el controlador.

  • ¿Cuál es el enfoque recomendado en Rails 3?
  • ¿Cuál es la forma de Rails para hacerlo?
  • ¿Cuál es la mejor práctica?
  • ¿Escenarios específicos cuando una de las alternativas es mejor que la otra?
  • ¿Cuál es la recomendación para grandes proyectos?

Gracias

Respuesta

9

Antes de Rails 3, añadiendo :remote => true habría generado un montón de JavaScript en línea dentro de la etiqueta de formulario, pero con Rails 3 EPU, el único cambio es la adición de un atributo personalizado HTML 5 data-remote=true . por ejemplo:

<%= form_for(@post, :remote => true) do |f| %> 

generará

por ahora, este es el enfoque rails3. la función js que lo genera está en el archivo rails.js. Si abre el archivo rails.js, verá varias definiciones de controlador remoto. El primero maneja el caso del envío remoto de formularios, el segundo maneja los enlaces remotos y los campos de entrada, el tercero maneja los enlaces no remotos que deben comportarse como los "me gusta".

de looking deeper into the code encontré que este archivo en realidad realizar una ajax jQuery llamada:

ajax: function(options) { 
     return $.ajax(options); 
    }, 

por lo no hay diferencia entre el uso de :remote => true y una llamada ajax jQuery regular, rieles actúa como un contenedor para llamar los mismos métodos

más información here, here y here.

+0

Entiendo que no hay diferencia si le das un vistazo profundo. Pero, desde el punto de vista de la claridad del código, la facilidad de mantenimiento y las mejores prácticas, ¿cuál es su opinión? – Tony

+0

como dije en mi respuesta - la manera de hacerlo es añadir: remote => true. esto hace que el código sea estándar en todas las aplicaciones de rails3 –

+0

He leído opiniones que dicen que fragmenta la lógica de la aplicación (teniendo múltiples .js.erb). ¿Qué piensas sobre eso? – Tony

Cuestiones relacionadas