2010-08-19 3 views
1

J'essaie d'adopter Jammit dans mon application Rails.Comment Jammit gérer vue JavaScript spécifique

config par défaut fourni dans la documentation saisit tous les fichiers js y compris vue javascript spécifique:

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 lorsque le mode javascript spécifique doit être exécutée que sur certain point de vue:

$(function(){ 
    alert("View specific message here!"); 
} 

Comment J'évite un tel effet?

Cordialement, Alexey Zakharov

Répondre

3

Ma préférence est de conclure que "vue-spécifique javascript" dans une fonction. Et puis appelez cette fonction en fonction de la page que vous chargez réellement. De cette façon, tous vos JavaScripts peuvent être mis en cache par les navigateurs en tant que fichier unique, et vous pouvez exécuter les parties du JS dont vous avez besoin. Par conséquent, j'ajouterais une balise <script> au modèle html.erb qui appelle votre fonction spécifique à la vue lors du chargement de la page.

espoir qui aide ...

+0

Rappelez-vous dans Haml vous pouvez utiliser un ': filtre javascript' pour appeler cette fonction aussi. Cela va écrire la balise de script correcte et l'envelopper dans CDADA. Si vous voulez le faire dans la section head de votre layout, utilisez content_for. : filtre $ (function() { callFunction() }); –

+0

Merci Jeremy. Voulez-vous dire ajouter quelque chose comme ceci: Frontend.Product.Category = { initialisation: function() {var dialogWindow = $ ("produit de dialogue.") dialogue ( { Autoopen: false, modal: true, draggable: false, redimensionnable: false }). } } –

+0

Alexey: Précisément. Vous devriez avoir une seule fonction d'entrée de niveau supérieur pour chaque page qui doit se comporter d'une manière différente. Et puis appelez le approprié ... – jashkenas

0

Je creuser jusqu'à ce signaler une alternative à l'approche jashkenas, qui est de lier le comportement juste des 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 à des pages. Si vous réorganisez vos vues, vous devrez également modifier votre JS. L'autre problème est que JS doit être au bas de la page pour tirer le meilleur parti du navigateur. Si vous placez des entrées de script dans vos vues, il est fort probable qu'elles se retrouveront sur le balisage html de la page et ralentiront le rendu.

BR, - José

Questions connexes