2010-05-02 33 views
18

Uso de rails3 - Tengo un proyecto con muchas tareas. Quiero usar javascript para construir la interfaz de usuario para cada tarea. Pensé que podría mostrar esas tareas en la página de presentación de proyectos al hacer un javascript parcial para cada uno. No puedo obtener 'tasks/show' para ver tareas/show.js.erb ¿Alguna idea?Cómo renderizar partial.js en rieles 3

En proyectos/show.html.erb

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

tareas/show.js.erb

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

puedo obtener los errores

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 

Gracias

+0

No estoy seguro pero trate: <% = render (: parciales => "tareas/show.js ",: collection => @ project.tasks)%> – fig

+0

gracias, pero desafortunadamente recibo lo mismo: faltan tareas parciales/show.js –

Respuesta

26

no deben No está en el archivo _show.js.erb?

De "Using Partials".

+0

Esto funcionó para mí siempre que no use" por completo texto. Al reemplazar la alerta ("prueba") con ert ('prueba') comenzó a funcionar correctamente para mí. – Philip

2

El problema es que en Rails 3 el render del archivo .js sólo buscar archivos en forma de show.js.erb o show.erb

Para evitar esto, usted ya sea que necesite cree un archivo _show.js.erb, pero dado que este tipo de derrota es el objetivo de los parciales, también puede cambiar el nombre del archivo show.html.erb para mostrar.erb

Sin embargo, esta es una mala práctica. una acción de controlador estándar sin una terminación de tipo (por ejemplo, show.erb)

Lo que haría si fuera usted es cambiar el nombre de su parte parcial como _tasks.erb en lugar de _show.html.erb, y si necesitabas tasks/show.html.erb, solo podías renderizar las _tasks parciales dentro de esa vista.

3

Bueno, yo no sé si es el mismo problema, pero pasé por algo similar con los carriles 3. tuve por ejemplo, una vista parcial en app/views/invoices/_select.html.erb y yo era capaz de hacer en una vista con

<% = render: parcial => "/ seleccionar facturas" %>

sin ningún problema y si en el controlador coloco

render: parciales => "facturas/SELECT"

pude abrir la acción en el navegador, el problema surge cuando trato de llamar a la acción de una llamada AJAX, entonces me sale el error ActionView::MissingTemplate. La única forma que encontré para resolver fue cambiar el nombre de la vista al _select.rhtml y luego todo funciona bien.

+0

Tengo el mismo problema. Lo conseguí trabajando copiando el archivo y cambiando html a js en el nombre del archivo, como lo sugirió Michael. Pero esa no parece ser una muy buena solución. –

5

Probar:

render: parciales => "tareas/show.js"

+0

si lo hizo, y cambió el nombre del archivo a _show.js.erb, funcionaría – bonhoffer

10

Puede probar esto. En lugar de tener un Javacript parcial, puede crear un html uno _show_js.html.erb y rodear su código JS con la etiqueta html <script>.

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

y,

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

Por el bien de ** la mejora progresiva ** debería considerar adjuntar la funcionalidad deseada a través de buenos selectores JS antiguos, una vez que el HTML básico solo la versión está funcionando :) – user569825

4

para que funcione lo necesario para añadir el formato:

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