Есть ли функция 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