Comment JavaScript spécifique vue poignée Jammit
-
29-09-2019 - |
Question
Je suis en train d'adopter Jammit dans mon application Rails.
config par défaut fourni dans la documentation saisit tous les fichiers js y compris javascript spécifique de la vue:
embed_assets: on
javascripts:
workspace:
- public/javascripts/vendor/jquery.js
- public/javascripts/lib/*.js
- public/javascripts/views/**/*.js
- app/views/workspace/*.jst
stylesheets:
common:
- public/stylesheets/reset.css
- public/stylesheets/widgets/*.css
workspace:
- public/stylesheets/pages/workspace.css
empty:
- public/stylesheets/pages/empty.css
Considérons un cas où le javascript spécifique de vue doit être exécutée que sur certain point de vue:
$(function(){
alert("View specific message here!");
}
Comment puis-je éviter un tel effet?
Cordialement, Alexey Zakharov
La solution
Ma préférence est de conclure que « spécifique à la vue-javascript » dans une fonction. Et puis appeler cette fonction en fonction de la page que vous chargez réellement. De cette façon, tous vos JavaScripts peuvent être mises en cache par les navigateurs comme un seul fichier, et vous pouvez exécuter les parties de la JS que vous avez besoin.
Je voudrais ajouter une balise de <script>
au modèle de html.erb
particulier qui appelle votre fonction spécifique à la vue de la charge de la page.
L'espoir qui aide ...
Autres conseils
Je creuse dans ce jusqu'à signaler une alternative à jashkenas approche, qui est à un comportement de lien juste pour les balises spécifiques.
$(function() {
$('#my-view-object').someBehaviour();
}
Alors, quel est le piège? La principale différence est que le code JS tend à être lié à certains objets, pas de pages. Si vous réorganiser votre point de vue, vous devrez avoir à changer vos JS aussi. L'autre problème est que JS doit être au bas de la page pour tirer le maximum hors du navigateur. Si vous mettez les entrées de script dans votre point de vue, il est fort probable qu'ils finiront par être partout dans HTML de la page balises et de ralentir le rendu.
BR, - José