2010-04-11 18 views
0

Mon intention principale est de garder la fonctionnalité indépendante du Javascript, pour qu'il soit dégradable. Peut-être que je suis en train d'aller où je veux dans le mauvais sens, mais l'idée principale est:Comment faire pour rendre un fichier partiel et un fichier javascript dans le même temps dans Rails?

  • il y a quelques onglets jQuery UI et lorsque l'utilisateur appuie sur un lien, un nouvel onglet est ajouté correspondant à cette action
$("#tabs").tabs('add', "/groups", "My Groups"); 
  • le contrôleur identifie la requête AJAX et rend seulement la partie de cet onglet
if request.xhr? 
    render :partial => "index_tab" 
end 
  • à ce point, je voudrais que le fichier Javascript associé à l'action /groups/index à exécuter ainsi, ce qui signifie le fichier dans le dossier index.js.erb les groupes. En raison de la règle "un seul rendu", je ne pouvais pas penser à une bonne façon de le faire et j'ai besoin d'une solution rapide.

Nous vous remercions de vos suggestions.

Répondre

0

Chargement dynamique de JS peut introduire toutes sortes de complexité que je pense est souvent préférable d'éviter. Je pense qu'il est préférable de charger tous vos JS en même temps dans un seul fichier au chargement de la page - de cette façon, vous pouvez avoir une seule requête de script minifiée qui facilite la mise en cache et la performance.

La création d'onglets peut ensuite déclencher le traitement de code approprié. Vous pouvez commencer à envelopper ceci dans un modèle d'événement avec des écouteurs (ainsi le code écoute les onglets du bon type à ajouter), ou vous pouvez simplement appeler une fonction une fois que la requête ajax pour charger le a été complétée avec succès.

+0

Merci ... Eh bien je suppose que tout mettre ensemble est une solution définitive. Mais à ce stade, j'ai des fichiers js séparés pour chaque action de chaque contrôleur et j'espérais pouvoir garder les choses comme ça. – master2004

+0

Je le fais aussi et je les empaquette en utilisant l'excellent asset_packager. Vous pouvez toujours les inclure individuellement dans votre modèle pour le développement. –

1

Vous pouvez le faire de la même manière que vous pouvez avoir vos vues create et edit montrant la même forme avec un partiel.

_tab.html.erb
<div class="tab" id="<%= tab.id %>"> 
    <p>whatever</p> 
</div> 
show.html.erb
<%= render 'tab', :tab => TabObject %> 
show.js.erb
$('#tabs.').... 
$('something').append("<%= escape_javascript(render('tab', :tab => TabObject)"); 

Et si vous demande une page avec script dataType jQuery, vous devriez vraiment avoir correspondant vues car si les rails restituent les vues html à leur place, jQuery les placera dans une balise <script> qui n'est pas supposée contenir du html.