2011-11-23 12 views
16

Estoy trabajando en una aplicación de hobby y usando jQuery. Los resultados están bien en este momento, pero soy un novato de jQuery y supongo que hay algunas mejoras significativas que puedo hacer en la estructura del código. Dejando de lado Coffescript por el momento, una cosa que me he estado preguntando es cómo usar correctamente los archivos .js específicos del modelo en la cartera de activos.¿Cómo trabajar adecuadamente con jQuery en la cartera de activos de Rails 3.1?

Por ejemplo, cuando se trabaja con mi modelo de usuario, es posible que tenga algún código que desee ejecutar cuando el documento esté listo. Digamos que puse eso en $(document).ready(function() {...}); en el archivo users.js generado por Rails 3.1.

Al día siguiente, estoy trabajando con el modelo Pet y tengo un código que quiero ejecutar con el documento listo. Lo puse en otro $(document).ready(function() {...}); dentro del archivo pets.js que Rails prepara.

Aquí es donde surgen mis preguntas:

  1. ¿Cómo se compilan cuando se ejecuta la aplicación?
  2. ¿Estoy instanciando dos instancias de jQuery con el ejemplo anterior?
  3. ¿Debo usar solo $(document).ready(function() {...}); una vez en la aplicación o Rails compila mi código en una sola llamada?
  4. ¿Qué pertenece a los archivos .js específicos del modelo?
  5. ¿Existen diferencias entre cómo se ejecutará en los modos de desarrollo y producción?

Respuesta

12

1) Compilación: Rails assets pipeline solo combina todos los archivos javascript en un archivo grande.

2) jQuery sólo se carga una vez, usted está teniendo múltiples $(document).ready funciones, pero eso no es un problema

3) Carriles no hace nada con la llamada, y jQuery puede manejar con seguridad más de esos bloques por página.

4) Usted lo llama un modelo específico .js, prefiero llamarlo específico del controlador. Usted agrupa las funcionalidades que pertenecen juntas. Si lo que los une es un controlador o un modelo realmente no importa. Dividimos nuestro js en archivos separados para que sea más manejable.

5) En desarrollo, los activos se compilan en cada solicitud, en producción se realiza solo una vez. También en producción podría ser minimizado y comprimido.

Espero que esto ayude.

3

Intentaré responder algunas de ellas por usted. Lo único que realmente desea es 1 llamada preparada para documentos por página, pero no importa si tiene múltiples. Lo que está contenido dentro de ellos será el código que se ejecutará una vez que el DOM haya sido cargado en el navegador. Rails no hará nada mágico con el javascript, se mantendrá igual a lo que escribes en tus archivos. Rails no compilará el código de JavaScript de una manera original, para los entornos de producción puede minificarlo, pero el código real seguirá siendo prácticamente el mismo. Esto es ejecutado por el navegador, no el servidor.

No estás instanciando 2 instancias, ya que jQuery solo se carga una vez, y luego se hace referencia a ellas. La llamada $ (documento) .ready() es solo una función esencial, nada más.

Los archivos jquery específicos del modelo se pueden usar junto con Ajax en una aplicación de rieles. Entonces puede tener archivos como 'create.js.erb', que en realidad es un archivo javascript al que puede pasar las acciones de los raíles. Si quieres disparar un código específico después de crear/eliminar una publicación, entonces puedes usar archivos como este para hacerlo, solo tienes que responder el javascript en tu controlador de rieles, pero esto va un poco más profundo de lo que pretendes. mira tu pregunta de arriba

Lo principal a recordar es que jquery es solo javascript y javascript se ejecuta con el navegador: en el front end sin integración dinámica, siempre se ejecuta en el lado del cliente y jquery es fantástico principalmente para la manipulación de DOM.

¡Espero que eso aclare algunas cosas!

+0

Gracias por la información adicional. – Clay

Cuestiones relacionadas