Rails 3 и проблема интеграции Colorbox - PullRequest
0 голосов
/ 08 апреля 2011

Я пытаюсь использовать Colorbox вместе с Rails 3, но сталкиваюсь с одной проблемой. Я делаю что-то вроде следующего:

<script type = "text/javascript">

   $(function() {

      $('a.modal').colorbox({});

   });

</scirpt>

Проблема, с которой я столкнулся, заключается в том, что когда colorbox отображает содержимое запрашиваемой страницы, оно отображает всю страницу (верхний колонтитул, нижний колонтитул, содержимое и т. Д.), Когда все, что мне действительно нужно, это содержимое. Я не уверен, что это что-то делать с Colorbox или что-то, что мне нужно для обработки с Rails.

Ответы [ 3 ]

1 голос
/ 08 апреля 2011

Похоже, запрашиваемая страница соответствует макету по умолчанию, который вы используете для остальной части вашего приложения (обычно application.html.erb).

Если это так, то проблема не в ColorBox, а в том, чтобы заставить Rails визуализировать ваш контент с использованием другого макета для запрашиваемой страницы. Возможно, вам потребуется отдельное действие в контроллере, который использует пользовательский макет для отображения представления, а не макет application.html.erb по умолчанию.

Например, допустим, ваши ссылки ColorBox в данный момент вызывают это действие:

def show
  @foo = Foo.find(params[:id])
end

Вы бы сделали что-то подобное для действия ColorBox:

def colorbox
  @foo = Foo.find(params[:id])
  render :layout => "colorbox"
end

И создайте макет colorbox.html.erb и соответствующую запись маршрутов.

0 голосов
/ 24 января 2014

jQuery-modal-rails gem предоставляет глобальный фильтр, чтобы не отображать макет, если запрос является ajax. Вы можете использовать эту идею код фильтра , чтобы создать аналогичный эффект для вашей интеграции с colorbox. Код был бы таким в ApplicationController.

  before_filter do |controller|
    (controller.action_has_layout = false) if controller.request.xhr?
  end
0 голосов
/ 05 июня 2012

Хотя принятое решение является правильным для Rails в целом, когда вы не хотите, чтобы макет появлялся, это не решение для возникшей проблемы. Я также попытался внедрить [colorbox]: (https://github.com/jackmoore/colorbox) в приложение Rails 3.2. Я наткнулся на ту же проблему, а именно в модальном окне была страница, на которой была нажата ссылка.

Ранее, в файле представления Rails (.html.erb):

<% content_for :head do %>
  <%= stylesheet_link_tag 'colorbox' %>
  <%= javascript_include_tag 'jquery.colorbox' %>
  <%= javascript_tag do -%>
    $(document).ready(function(){
      $("a.modal").colorbox({});
    });
  <% end -%>
<% end %>

<% @photos.each do |photo| %>
  <%= link_to image_tag(photo.url(:thumb)), '#', :class => 'modal' %>
<% end %>

По сути, макет приложения (application.html.erb layout) показывался, потому что ссылка указывала на текущую страницу '#', которая использует макет application.html.erb. Ссылка должна быть путем изображения, а не маршрутом Rails (метод контроллера):

<% @photos.each do |photo| %>
  <%= link_to image_tag(photo.url(:thumb)), photo.url, :class => 'group1' %>
<% end %>

Примечание. В этом решении используются методы, специфичные для моей настройки, с использованием carrierwave для загрузки фотографий и создания миниатюр. Вот общее решение:

<p><a href="/images/image_1.jpg" class="modal">Image 1</a></p>
<p><a href="/images/image_2.jpg" class="modal">Image 2</a></p>
<p><a href="/images/image_3.jpg" class="modal">Image 3</a></p>
...