Как отрисовать частичный.js в рельсах 3 - PullRequest
19 голосов
/ 03 мая 2010

Использование rails3 - у меня есть проект со многими задачами. Я хочу использовать JavaScript для создания пользовательского интерфейса для каждой задачи. Я подумал, что смогу отобразить эти задачи на странице показа проектов, отредактировав частичку javascript для каждого из них. Я не могу получить 'tasks / show', чтобы увидеть tasks / show.js.erb Есть идеи?

В проектах / show.html.erb

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

задачи / show.js.erb

* +1007 *

Я получаю ошибки

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

Спасибо

Ответы [ 6 ]

26 голосов
/ 03 мая 2010

Разве не должно быть в файле _show.js.erb?

С «Использование частичек» .

10 голосов
/ 21 июля 2011

Вы можете попробовать это. Вместо части Javacript вы можете создать html-код _show_js.html.erb и окружить свой JS-код тегом html <script>.

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

и

<div id="tasks">
<%= render(:partial => "tasks/show_js", :collection => @project.tasks) %> 
</div>
5 голосов
/ 24 февраля 2016

Чтобы все заработало, мне нужно было добавить формат:

 <script> 
  <%= render(:partial => 'shared/topmenujs', :formats => [:js] ) %>
  </script>
5 голосов
/ 27 января 2011

Попробуйте:

render: частичный => "tasks / show.js"

3 голосов
/ 05 ноября 2010

Ну, я не знаю, если это та же проблема, но я прошел через аналогичную вещь с рельсами 3. У меня был, например, частичный вид в app/views/invoices/_select.html.erb, и я смог отрендерить в виде с

<% = визуализация: частичная => "счета / выберите"%>

без каких-либо проблем, и если в контроллере я помещаю

визуализация: частичная => "счета / выберите"

Мне удалось открыть действие в браузере, проблема возникает, когда я пытаюсь вызвать действие с помощью вызова ajax, затем я получаю ошибку ActionView::MissingTemplate. Единственный способ найти решение было переименовать представление в _select.rhtml, и тогда все будет работать нормально.

2 голосов
/ 06 октября 2010

Проблема в том, что в Rails 3 рендер из файла .js будет искать только файлы в форме show.js.erb или show.erb

Чтобы обойти это, вам нужно было бы либо создать файл _show.js.erb, но, поскольку этот тип игнорирует назначение партиалов, вы можете просто переименовать файл show.html.erb в show.erb

Однако, вероятно, это плохая практика - выполнять стандартное действие контроллера без окончания типа (например, show.erb)

Что бы я сделал, если бы вы были на вашем месте, переименуйте ваше частичное в что-то вроде _tasks.erb вместо _show.html.erb, а затем, если вам понадобится файл tasks / show.html.erb, вы можете просто сделать частичные _таши внутри это мнение. * +1007 *

...