Как отобразить шаблон html в шаблоне javascript в Phoenix Framework

Допустим, у меня есть 2 файла, create.js.eex и post.html.eex, и я хочу отобразить содержимое шаблона post.html.eex внутри шаблона create.js.eex. Что-то вроде этого:

$("#something").append("<%= safe_to_string render "post.html", post: @post %>");

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


person NoDisplayName    schedule 03.10.2015    source источник


Ответы (2)


Используйте escape_javascript:

$("#something").append("<%= escape_javascript render("post.html", post: @post) %>");

Вы можете render_to_string и избежать этого, но, похоже, в этом нет особой необходимости - и, поскольку он возвращает строку, он выполнит HTML-экранирование всей разметки.

Собственно, именно этот пример есть в документации:

https://hexdocs.pm/phoenix_html/Phoenix.HTML.html#escape_javascript/1

person dotdotdotPaul    schedule 08.07.2016
comment
Ха-ха, я на самом деле пиарил эту функцию - person NoDisplayName; 09.07.2016

Вы можете использовать render_to_string

    Phoenix.View.render_to_string(MyApp.PageView, "index.html", foo: "bar")

Имейте в виду, что это может подвергнуть вас XSS-атаке.

person Preston Marshall    schedule 03.10.2015