2010-05-23 12 views
30

mis aplicaciones de rieles (todos 2.3.5) usan una combinación total de javascript, rjs, prototipo y jquery en línea. Llamémoslo aprendizaje o dolores de crecimiento. Últimamente he estado cada vez más encaprichado con javascript discreto. Hace que tu html esté limpio, de la misma manera que css lo limpió.prácticas recomendadas de rieles donde colocar javascript discreto

Pero la mayoría de los ejemplos que he visto son pequeños ejemplos, y poner toda Javascript (jQuery) en el interior application.js

ahora tengo una bastante grande de aplicaciones, y estoy pensando en maneras de estructurar mis js. De alguna manera me gusta que mi guión es todavía cerca de la vista, así que estoy pensando algo así como

orders.html.erb 
orders.js 

donde orders.js contiene el Javascript discreta específica a esa vista. Pero tal vez solo soy yo siendo demasiado conservador :)

He leído algunos mensajes de Yehuda Katz sobre este mismo problema here y here, donde él aborda este problema. Pasará por sus archivos js y solo cargará aquellos relevantes para su vista. Pero, por desgracia, no puedo encontrar una implementación actual.

Así que mis preguntas:

  • ¿Cómo se estructura el mejor Javascript discreta; administre su código, ¿cómo se asegura de que sea obvio desde el html qué se supone que debe hacer algo? Supongo que los buenos nombres de clase van un largo camino :)
  • ¿cómo organizas tus archivos, cargándolos a todos? ¿sólo algunos? utiliza content_for :script o javascript_include_tag en su vista para cargar los scripts relevantes. O ...?
  • ¿escribes funciones muy genéricas (como una eliminación), con parámetros (¿añades atributos adicionales?), O escribes funciones muy específicas (¿SECO?). Sé que en Rails 3 hay un conjunto estándar, y todo es discreto allí. ¿Pero cómo comenzar en Rails 2.3.5?

En resumen: ¿cuáles son las mejores prácticas para hacer javascript discreto en los rieles? :)

Respuesta

10

No creo que haya una mejor práctica, pero les haré saber lo que hago.

  1. que tienen una serie de archivos js cada uno para con su propio propósito en el directorio public/javascripts/. Algunos ejemplos podrían ser utility.jschat.jsshopping_basket.js y así sucesivamente.

  2. Yo uso asset packager y defino una gran colección de grasa para todas mis funciones de uso general y otra para la funcionalidad solo de administrador. Los viajes redondos al servidor cuestan demasiado. Básicamente me incluyo todos los js en al cargar la primera página minified en una burbuja (en general)

  3. que permiten básica $(document).ready ganchos en línea en las páginas, y mantenerlos realmente corto.

  4. Los datos a los que deben acceder mis archivos js se representan en línea con la página. (Por lo general, en el DOM, a veces como vars - Ej var xyz = 100.)

  5. por lo general voy a desarrollar mis controladores con javascript desactivado (y asegúrese de que todas las obras), a continuación, lo enciendo y espolvorear unas pocas if request.xhr? donde sea necesario.


Tenga en cuenta, Rail 3.1 introduce una mejor práctica incorporada, ver: http://guides.rubyonrails.org/asset_pipeline.html - en lo personal he tenido problemas de rendimiento y configuración con la nueva tubería, sin embargo, muchos otros han tenido gran éxito con eso.

+0

Esto es muy interesante. Completo. Todavía estoy interesado en lo que otros tienen que decir. – nathanvda

3

Recientemente documenté cómo he estado managing javascript in Ruby on Rails. Básicamente descompongo las cosas en muchos archivos pequeños y granulares, cada uno con un espacio de nombres apropiado y luego los combino en un único archivo para la producción usando asset_packager.

+0

Me gusta cómo puede cargar automáticamente un archivo .js con el mismo nombre que su controlador para sus vistas. Eso parece un buen comienzo al menos :) – nathanvda

1

Encontré esta publicación mientras trataba de resolver el mismo problema, pero ninguna de las soluciones existentes me pareció la correcta. Escribí mi enfoque here. Me encanta la convención de Rails sobre la configuración, así que quería el mismo enfoque para incluir Javascripts que son aplicables solo a una página de acción en particular. Si nada más, es al menos otro enfoque para agregar a sus opciones.

+0

Me gusta mucho su sugerencia, y está muy cerca de lo que realmente me gustaría. Lo que hago ahora es separar los archivos js en los archivos por controlador de todos modos, pero luego mezclarlos en un gran js combinado porque eso se carga más rápido (1 jj grande en lugar de una tonelada de archivos separados). – nathanvda

Cuestiones relacionadas