web-dev-qa-db-fra.com

Comment rendre partial.js in Rails 3

Utiliser Rails3 - J'ai un projet avec de nombreuses tâches. Je veux utiliser JavaScript pour construire l'interface utilisateur pour chaque tâche. J'ai pensé que je pouvais afficher ces tâches sur les projets show page en rendant une partielle JavaScript pour chacun. Je ne peux pas obtenir des "tâches/montrer" pour voir les tâches/show.js.erb toutes idées?

Dans des projets/show.html.erb

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

tâches/spectacle.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

19
Julian Mann

Ne devrait-il pas être dans le fichier _show.js.erb?

De - "Utilisation partielle" .

27
wombleton

Vous pouvez essayer cela. Au lieu d'avoir une partielle JavaScript, vous pouvez créer un code HTML _show_js.html.erb Et surmonter votre code JS avec la balise 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>
10
cortex

Pour que cela fonctionne, je devais ajouter le format:

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

Eh bien, je ne sais pas si c'est le même problème, mais j'ai traversé une chose similaire avec Rails 3. J'avais par exemple une vue partielle dans app/views/invoices/_select.html.erb et j'ai pu rendre avec une vue avec

<% = Render: Partial => "Factures/Sélectionnez"%>

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

render: Partial => "Factures/Sélectionnez"

J'ai pu ouvrir l'action dans le navigateur, le problème surviennent lorsque j'essaie d'appeler l'action d'un appel Ajax, puis je reçois le ActionView::MissingTemplate Erreur. Le seul moyen que j'ai trouvé à résoudre était de renommer la vue à _select.rhtml Et puis tout fonctionne bien.

3
ramontiveros

Le problème est que IN Rails 3 Le rendu du fichier .js recherchera uniquement des fichiers sous la forme de show.js.erb ou show.erb.

Pour contourner cela, vous devez soit créer un fichier _show.js.erb, mais comme ce type de défaite le but des partiels, vous pouvez également renommer le fichier show.html.erb à montrer.erb

C'est probablement une mauvaise pratique, cependant, de faire une action de contrôleur standard sans type final (E.G. show.erb)

Ce que je ferais si j'étais que vous renommez votre partiel quelque chose comme _tasks.erb au lieu de _show.html.erb, puis si vous aviez besoin d'une tâche/show.html.erb, vous pouvez simplement rendre partial à l'intérieur de cette vue.

2
Michael Waxman