Rails 5.2 + Webpacker: рендеринг частичного внутри javascript - PullRequest
0 голосов
/ 02 октября 2018

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

I включил поддержку 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: и file: ... Я в тупике.

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

ETA: В development.log это выглядит так:

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

... так что, похоже,рендеринг частичного, но файл some_controller.js не включается в объединенное application.js:

something_controller.js is missing!

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

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 Ответ

0 голосов
/ 02 октября 2018

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

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

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

...