Ошибка при попытке отобразить частичный шаблон js .erb - PullRequest
0 голосов
/ 22 марта 2020

Rails версия 6.0.2.1 Ruby версия 2.6.5

Я пытаюсь визуализировать частичное изображение в представлении моего приложения, используя jquery.

Это мой javascript file:

import $ from "jquery";
$(() =>
  $("a#test-button").on("click", ev => {
    ev.preventDefault;
    $("div#teacher-form").html("<%= j render(partial: 'teacher_form') %>");
  })
);

Затем я ссылался на javascript в шаблоне представления примерно так:

<%= javascript_pack_tag 'test_button' %>
  <%= link_to 'Test',  stakeholder_student_school_year_path, data: { type: :html }, remote: true,  id: 'test-button', class: 'btn btn-info' %>
<div id="teacher-form"></div>

И в моем контроллере также:

def show
    @teachers = @year.teachers 
    respond_to do |format|
      format.html 
      format.js { 
        render 'student_school_years/_teacher_form', 
        layout: false
       }
    end 
  end

Когда я нажимаю кнопку теста, чтобы добавить частичное, оно отображает в представлении следующий фрагмент кода <% = j render (part: teacher_form ')%> вместо фактического частичного шаблона. Не могу понять, что происходит.

1 Ответ

1 голос
/ 22 марта 2020

Вы, похоже, совершенно не поняли, как работают JS .erb шаблоны.

Вы не ссылаетесь на .js.erb шаблоны с javascript_pack_tag. То для ссылки на активы в конвейере активов. И вы не можете отобразить партиалы в конвейере ресурсов, так как они компилируются во время развертывания.

Причина, по которой вы просто получаете буквальную строку "<%= j render(partial: 'teacher_form') %>", заключается в том, что ресурсы не отправляются через ERB в веб-пакете. Звездочки сделали бы это и вызвали ошибку.

Вместо этого вы должны написать свой шаблон js.erb, чтобы он изменил страницу:

def show
    @teachers = @year.teachers 
    respond_to do |format|
      format.html 
      format.js # renders show.js.erb
    end 
  end

// You can't use imports since this is not run in the assets pipeline
// you have to make jQuery a global
$("#teacher-form").html("<%= j render(partial: 'teacher_form' %>");

Когда вы нажимаете ссылка драйвер Rails u js на самом деле просто загружает этот скрипт и оценивает его на странице. Предполагается, что это позволяет вам делать ajax запросы и SPA-подобные вещи без инфраструктуры SPA или фактически писать обработчики запросов. Если его хорошая идея или нет, является спорной.

1017 * То, что я не понимаю, почему вы не просто поставить форму в представлении, в первую очередь, и только переключить его видимость, а не делаете соучастник сервера это то, что просто трансформация на стороне клиента.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...