Rails 5.2 + Webpacker: рендеринг частичного внутри javascript

У меня есть javascript-файл (something_controller.js.erb; технически Stimulus, но я не думаю, что это важно), где я хотел бы включить контент частичного, как HTML, который он добавит позже.

Я включил поддержку ERB с помощью Webpacker , но вызов <%= render partial: 'shared/condition' %> не работает. Он просто спокойно не может сгенерировать файл .js и включить его.

Этот код не работает:

const html = `<%= ApplicationController.renderer.render partial: 'shared/condition' %>`

Это не ошибка renderer.render, хотя, потому что это работает:

const html = `<%= ApplicationController.renderer.render inline: 'something' %>`

Содержимое shared / _condition.html.erb не является странным и не имеет переменных:

<div data-controller='condition'>
  <a href='#' data-action='condition#remove'><i class="fas fa-trash-alt"></i></a>
  <a href='#' data-toggle="popover" data-target='condition.item' data-action='condition#doNothing'>Item</a>
  <a href='#' data-toggle="popover" data-target='condition.value' data-action='condition#doNothing'>Value</a>
</div>

Я пробовал каждую комбинацию пути, о котором я могу думать: app / views / shared / condition, / app / views / shared / condition, с _, с .html.erb. Я пробовал template: рендеринга template: и file: ... Я в тупике.

Полусвязь: есть ли где-нибудь какие-либо ошибки? В журнале показано, что компиляция выполнена вообще, но контроллер, который просто не генерируется. Я не могу найти очевидный журнал ошибок.

ETA: В development.log это выглядит следующим образом:

[Webpacker] Compiling…
  Rendered shared/_condition.html.erb (36.1ms)
[Webpacker] Compiled all packs in /Users/timsullivan/dev/thing/public/packs

... так что, похоже, это частичное отображение, но файл something_controller.js не включается в комбинированное приложение application.js:

something_controller.js отсутствует!

В попытке найти ошибку где-то я попытался запустить:

timsullivan$ rails assets:precompile
yarn install v1.6.0
(node:45691) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
[1/4] ?  Resolving packages...
success Already up-to-date.
✨  Done in 0.49s.
Webpacker is installed ? ?
Using /Users/timsullivan/dev/thing/config/webpacker.yml file for setting up webpack paths
Compiling…
Compiled all packs in /Users/timsullivan/dev/thing/public/packs

Всего 1 ответ


Предполагая, что вы добавили частично обработанный элемент с jquery или что-то еще, вам нужно будет избежать содержимого тега erb.

Попробуйте: "<%= escape_javascript(render("/path/after/views/condition")) %>"

Более подробное объяснение здесь: https://stackoverflow.com/a/1623813/695186


Есть идеи?

10000