2010-05-02 7 views
18

Utilisation de rails3 - J'ai un projet avec beaucoup de tâches. Je veux utiliser javascript pour construire l'interface utilisateur pour chaque tâche. Je me suis dit que je pourrais afficher ces tâches sur la page show des projets en rendant un javascript partial pour chacun. Je ne peux pas obtenir 'tasks/show' pour voir tasks/show.js.erb Des idées?Comment rendre partial.js dans les rails 3

Dans les projets/show.html.erb

<div id="tasks"> 
<%= render(:partial => "tasks/show", :collection => @project.tasks) %> 
</div> 

tâches/show.js.erb

$("tasks").append(new TaskWidget(task.id)) 

Je reçois les erreurs

ActionView::MissingTemplate in Projects#show 

Missing partial tasks/show with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths .... around line #13 

Merci

+0

Je ne sais pas, mais essayez: <% = render (: partiel => « tâches/show.js ",: collection => @ project.tasks)%> – fig

+0

merci, mais malheureusement je reçois la même chose: Tâches partielles manquantes/show.js –

Répondre

26

shouldn ne soit pas dans le fichier _show.js.erb?

De "Using Partials".

+0

Cela a fonctionné pour moi tant que je n'ai pas utilisé" pour la plaine En remplaçant alert ("test") par al ert ('test') il a commencé à fonctionner correctement pour moi. – Philip

2

Le problème est que dans Rails 3 le rendu du fichier .js ne fera que rechercher des fichiers sous forme de show.js.erb ou show.erb

Pour contourner ce problème, vous devez soit créer un fichier _show.js.erb, mais puisque ce genre de vaincre le but des partiels, vous pouvez simplement renommer le fichier show.html.erb pour montrer.erb

Ceci est probablement une mauvaise pratique, cependant, pour faire une action de contrôleur standard sans fin de type (par exemple show.erb)

Ce que je ferais si j'étais vous renommez votre quelque chose partielle comme _tasks.erb Au lieu de _show.html.erb, et si vous aviez besoin d'une tâche/show.html.erb, vous pourriez simplement rendre les _tasks partiels à l'intérieur de cette vue.

3

Eh bien, je ne sais pas si c'est le même problème, mais je suis passé par une chose semblable avec des rails 3. J'ai eu par exemple une vue partielle en app/views/invoices/_select.html.erb et j'ai pu rendre dans une vue avec

<% = render: partial => "factures/select" %>

avec tout problème et si, dans le contrôleur je place

render: partiel => « factures/select »

j'ai pu ouvrir l'action dans le navigateur, le problème se pose quand je tente d'appeler l'action d'un appel ajax, je reçois l'erreur ActionView::MissingTemplate. Le seul moyen que j'ai trouvé pour résoudre était de renommer la vue à _select.rhtml et tout fonctionne bien.

+0

J'ai le même problème. Je l'ai eu en travaillant en copiant le fichier et en changeant html à js dans le nom de fichier, comme suggéré par Michael. Mais cela ne semble pas être une très bonne solution. –

5

Essayez:

rendu: partiel => "tâches/show.js"

+0

s'il l'a fait, et a changé le nom de fichier en _show.js.erb, cela fonctionnerait – bonhoffer

10

Vous pouvez essayer cela. Au lieu d'avoir un Javacript partiel, vous pouvez faire un _show_js.html.erb html et entourer votre code JS avec le tag html <script>.

<script type='text/javascript'> 
$("tasks").append(new TaskWidget(task.id)) 
</script> 

et,

<div id="tasks"> 
<%= render(:partial => "tasks/show_js", :collection => @project.tasks) %> 
</div> 
+0

Par souci de ** amélioration progressive ** vous devriez envisager d'attacher la fonctionnalité souhaitée via de bons vieux sélecteurs JS - une fois le HTML de base seulement la version fonctionne :) – user569825

4

Pour le faire fonctionner, je besoin d'ajouter le format:

<script> 
    <%= render(:partial => 'shared/topmenujs', :formats => [:js]) %> 
    </script>