Rails Layout для рендеринга JS и HTML - PullRequest
2 голосов
/ 25 июня 2011

Хорошо, это может быть немного странно, но вот вопрос:

У меня есть множество подобных взаимодействий между контроллером и представлением, которые я хотел бы сделать более СУХИМЫМИ.Пользователь щелкает ссылку, которая преобразуется для выполнения ответа AJAX с JQuery.Ответ ожидает некоторый JavaScript, который будет возвращен и выполнен.Некоторые из них следуют одному и тому же шаблону:

$("working_div").html("<%= render partial => 'some_partial' %>")

Есть ли способ сделать так, чтобы я мог СУШИТЬ это, выполнив ...

$("working_div").html("<%= yield %>")

И он все еще возвращает JavaScript

1 Ответ

1 голос
/ 05 октября 2011

Да, вы можете, если вы используете макеты в макетах. (Требуется, чтобы вы создали еще один файл, но он будет СУХИМ.) Я не уверен, что это то, что вы хотите, но вот как это работает.

Ваш вложенный макет может вызвать yield (даже если у вас есть обычный макет, который также вызывает yield. Для js ваш стек рендеринга будет продолжен: [шаблон]> [частичное расположение]> [частичное]

Ваш контроллер будет вызывать вашу обычную команду рендеринга (или ни одной, если она неявная). (Я не знаю, где вы хотите объявить, какая часть должна быть визуализирована, поэтому я просто выбрал здесь.):

def index
  @partial = params[:partial] || 'some_partial'
  respond_to do |format|
    format.js render :template => 'my_template'
  end
end

Ваш шаблон вместо вызова частичного (some_partial) будет вызывать частичный шаблон, который, в свою очередь, вызывает частичный:

# my_template
/* Some js ... */
$("#working_div").html("<%= render :layout => "nested_layout", :partial => @partial %>")
/* Some more js ... */

Ваш вложенный фрагмент может затем вызвать метод yield:

# nested_partial
/* Some js ... */
<%= yield %>
/* Some more js ... */
...