rails meilleures pratiques où placer JavaScript discret

Mes applications rails (toutes 2.3.5) utilisent un mélange total de javascript en ligne, rjs, prototype et jquery. Appelons-le l'apprentissage ou les douleurs de croissance. Dernièrement, j'ai été de plus en plus entiché de JavaScript discret. Cela rend votre html propre, de la même manière que css l'a nettoyé.

Mais la plupart des exemples que j'ai vus sont de petits exemples, et ils mettent tout javascript (jquery)dans l'application.js

Maintenant, j'ai une assez grande application, et je pense à des moyens de structurer mon js. Je comme si mon script était toujours proche de la vue, donc je pense à quelque chose comme

orders.html.erb
orders.js

Où les ordres.js contient le JavaScript discret spécifique à cette vue. Mais peut-être que c'est juste moi étant trop conservateur:)

J'ai lu quelques messages de Yehuda Katz sur ce problème même ici et ici , où il aborde ce problème. Il passera par vos fichiers js et ne chargera que ceux qui sont pertinents pour votre vue. Mais hélas je ne trouve pas de courant application.

Donc, mes questions:

  • comment structurer au mieux votre javascript discret; gérer votre code, comment vous assurer qu'il est évident à partir du html ce que quelque chose est censé faire. Je suppose que les bons noms de classe vont un long chemin:)
  • comment organisez-vous vos fichiers, chargez-les tous? juste un peu? utilisez-vous content_for :script ou javascript_include_tag dans votre vue pour charger les scripts pertinents. Ou ... ?
  • écrivez-vous des fonctions très génériques (comme une suppression), avec des paramètres (ajouter des attributs supplémentaires?), ou écrivez-vous des fonctions très spécifiques (sèches?). Je sais que dans Rails 3 Il y a un ensemble standard, et tout est discret là-bas. Mais comment démarrer dans Rails 2.3.5?

En bref: quelles sont les meilleures pratiques pour faire du javascript discret dans rails? :)

30
demandé sur Sam Saffron 2010-05-23 15:31:19

3 réponses

Je ne pense pas qu'il y ait une meilleure pratique, mais je vais vous faire savoir ce que je fais.

  1. J'ai une série de fichiers js, chacun pour leur propre but dans la public/javascripts/ répertoire. Quelques exemples pourraient être utility.js chat.js shopping_basket.js et ainsi de suite.

  2. J'utilise asset packager et définit une grosse collection pour toutes mes fonctionnalités d'utilisation générale et une autre pour la fonctionnalité admin uniquement. Les allers-retours vers le serveur coûtent beaucoup trop cher. J'inclus essentiellement tous les js en premier chargement de la page minifié dans un blob (en général)

  3. J'autorise les crochets de base $(document).ready en ligne dans les pages, et les garde vraiment courts.

  4. Les données auxquelles mes fichiers js doivent accéder sont rendues en ligne avec la page. (Habituellement dans le DOM, parfois comme vars-par exemple. var xyz = 100)

  5. Je développerai généralement mes contrôleurs avec javascript off (et je m'assurerai que tout fonctionne), puis je l'allumerai et saupoudrerai quelques if request.xhr? si nécessaire.


Restez dedans l'esprit, Rail 3.1 introduit une meilleure pratique intégrée, voir: http://guides.rubyonrails.org/asset_pipeline.html - sur une note personnelle, j'ai eu des problèmes de performance et de configuration avec le nouveau pipeline, mais beaucoup d'autres ont eu beaucoup de succès avec lui.

10
répondu Sam Saffron 2012-03-11 08:48:58

J'ai récemment documenté comment j'ai géré javascript dans Ruby on Rails . Je décompose essentiellement les choses en de nombreux petits fichiers granulaires, chacun avec un espace de noms approprié, puis les fusionne tous en un seul fichier pour la production en utilisant asset_packager.

3
répondu Toby Hede 2010-05-29 13:16:08

J'ai trouvé ce post en essayant de résoudre le même problème, mais aucune des solutions existantes qui m'a frappé comme la bonne. J'ai écrit mon approche ici. j'aime la convention de Rails sur la configuration, donc je voulais la même approche pour inclure les Javascripts qui ne sont applicables qu'à une page d'action particulière. Si rien d'autre, c'est au moins une autre approche à ajouter à vos options.

1
répondu jxpx777 2014-09-30 02:53:09