Rails Render Action с другим форматом - PullRequest
3 голосов
/ 01 июля 2011

Скажем, у меня есть метод поиска # приложения, который я хотел бы отвечать на запросы AJAX. Внутри моего представления JS (app / views / application / search.js.erb) я хотел бы отобразить представление HTML:

$("#content").html( escape_javascript( render( :action => 'search', :format => 'html' ) ) );
$("#title").html( "Title" );

Я знаю, что мог бы переместить вещи в частичное и отобразить их в представлениях HTML и JS, но проблема в том, что у меня много разных действий, на которые нужно реагировать таким образом, и я предпочел бы не создавать связку -линейный просмотр файлов, которые просто визуализируют частичное.

Есть ли способ явно визуализировать действие с определенным форматом и захватить различные части content_for? Таким образом, для приведенного выше примера я мог бы установить #title для HTML-кода, возвращаемого с помощью content_for: title или чего-то еще.

1 Ответ

1 голос
/ 04 сентября 2014

Я не уверен, что вывод связки HTML в исходный код JS - это отличный дизайн, но это был не ваш вопрос - и мне пришлось делать подобные вещи, чтобы выводить фрагменты HTML, визуализированные шаблонами, в XML, чтоЯ считаю более разумным :).

Так или иначе, в вашем вопросе есть несколько вещей.

Это меняется от версии к версии Rails, но в Rails 4.x, я думаю, это должно работать, вы были близки, но по какой-то причине оно должно быть :formats (во множественном числе) с массивом.А в вашем примере были и другие не связанные вещи, например, необходимость в тегах ERB <% = и вставка строк JavaScript в кавычки.</p>

var str = "<%= escape_javascript( render( :partial => 'partial_name', :formats => ['html'] ) ) %>";

Я думаю.Я не пробовал это точно сам.

Обратите внимание, что это все еще частично.Вы хотите визуализировать полный (не частичный) шаблон из другого шаблона - я уверен, что Rails не позволит вам сделать это.Меня это тоже немного раздражало.Но на самом деле, даже для рендеринга частичного HTML ("Some.html.erb") из частичного JS, вы должны использовать трюк :formats => [], или Rails будет настаивать "эй, я хочу найти js частично с этим именем, мы в режиме js man! ".

Но, как указано выше, должен отображаться _partial_name.html.erb из шаблона JS.Что до сих пор, вероятно, не очень хороший дизайн.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...