Есть ли функция AJAX, которая может просто получить частичку рельсов?

Мой контроллер используется по ссылкам со страницы результатов поиска, для которой требуется макет, и с самой страницы профиля, для которой не требуется макет. То, что я хотел бы достичь, это метод с одним контроллером show Это позволяет рисовать частичное с помощью AJAX со страницы профиля, а также рисовать частичное и макет из результатов поиска.

Самое важное ограничение, которое у меня есть, это то, что я не могу установить dataType: в script, Должно быть html, Поэтому я не могу использовать этот элегантный вызов AJAX-скрипта, который рендерит JS без участия format.html контроллера.

tabs_controller.js

def show
  @organization = Organization.find(params[:organization_id])
  @tab = @organization.tabs.find(params[:id])
  respond_to do |format|
    format.html { render :partial => 'tab', :layout => 'myHQpage' }
    format.js
  end
end

Javascript

$.get($(this).attr('href'), null, null, "html");

show.html.haml

= render :partial => 'tab'

Какую функцию AJAX я могу использовать здесь, которая рисует только часть, а не весь макет?

2 ответа

Сохраните настройку dataType "script" и просто добавьте тег-обертку вокруг результатов поиска. Затем используйте функцию jQuery replaceWith для замены содержимого этого тега:

_tag.html.erb:
<div id="search">
  ...
</div>

show.js.erb:
$('#search').replaceWith('<%= escape_javascript(render "tab") %>');

Я не уверен, что действительно понимаю, но это может помочь вам. Йо может добавить :layout => false в блоке format.js.

def show
  @organization = Organization.find(params[:organization_id])
  @tab = @organization.tabs.find(params[:id])
  respond_to do |format|
    format.html { render :partial => 'tab', :layout => 'myHQpage' }
    format.js { render :partial => 'tab', :layout => false }
  end
end
Другие вопросы по тегам