Rails рендерит частично без HTML-макета - PullRequest
4 голосов
/ 25 марта 2012

Хорошо, у меня проблема с рельсами и частями рендеринга. У меня есть макет с именем profile, и внутри макета профиля есть все мои js, таблицы стилей и т. Д.

<html>
<head>
  <title>Profile</title>
    <%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" %>
    <%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.10/jquery-ui.min.js" %>
    <%= javascript_include_tag "application" %>
    <%= stylesheet_link_tag "main" %>
    <%= stylesheet_link_tag "reset" %>
    <%= csrf_meta_tag %>
</head>

<body>
 <%= yield %>
</body>
</html>

Внутри тега yield (profile / index.html.erb) выше есть следующий

<%= render :partial => 'pages/page', :layout => "layouts/default", :locals => {:page => @page } %>

Теперь в режиме просмотра страниц / страниц есть те же теги по умолчанию, как файлы css и js. Когда я удаляю стили CSS, тогда я теряю стили для просмотра страниц / страниц. Есть ли способ, которым я могу визуализировать партиал, не вспоминая те же файлы CSS и JS, или как лучше сделать что-то подобное?

Ответы [ 4 ]

4 голосов
/ 25 марта 2012

Я всегда создаю возможность перезаписывать таблицы стилей следующим образом:

<%= stylesheet_link_tag content_for?(:stylesheets) ? yield(:stylesheets) : "application", :debug => Rails.env.development? %>

Затем внутри представления

<% content_for :stylesheets %> some stuff or nothing in here <% end %>

Это позволит вам указать представление, отображаемое в макете, который выне нужно никаких таблиц стилей, и тот же принцип применяется для javascripts.

При этом, если вы отрисовываете частичку внутри макета с html-тэгом, заголовком и т. д., вам, вероятно, следует изучить, есть ли лучший способделай, что делаешь.

3 голосов
/ 25 марта 2012

Вам нужно выбрать один или другой.Разметьте исходный вызов метода или передайте разметку частям.Делать то и другое было бы нелогично.

Здесь есть более подробное обсуждение:

http://mikemayo.org/2012/rendering-a-collection-of-partials-with-content_for

3 голосов
/ 25 марта 2012

Я редко вижу использование (или мне интересно, поддерживает ли Rails это использование ...)

<!-- confirmed, this usage will cause error in Rails 3.2  -->
<%= render :partial => "some_partial", :layout => "some_layout" ... %>

Я предпочитаю выбирать конкретную раскладку в контроллере:

def some_action
  # some code
  render :layout => "some_layout" 
end
1 голос
/ 08 октября 2013

Частичное - это, по сути, просто «кусок страницы» (как кусок торта ... но в кодовой форме).Он предназначен для заполнения небольшой части страницы;обычно тот, который будет динамически обновляться в зависимости от переменных страницы.


По моему мнению, вы путаете назначение макетов, представлений и частичных элементов.Если вы хотите динамически загружать CSS / JS, поместите блок " content_for " в представления профиля с макетом по умолчанию, например:

Макет

#layouts/default.rb
<html>
<head>
  <title>Site Title</title>
    <%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" %>
    <%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.10/jquery-ui.min.js" %>
    <%= javascript_include_tag "application" %>
    <%= stylesheet_link_tag "main" %>
    <%= stylesheet_link_tag "reset" %>

    <%= yield :header_includes %>

    <%= csrf_meta_tag %>
</head>

<body>
 <%= yield %>
</body>
</html>

Просмотров

#views/profiles/index.html.erb
<% content_for :header_includes do %>
    <%= stylesheet "profile_custom_css" %>
<% end %>

Частичное

Частичные значения могут использоваться для сохранения вашего кода СУХИМЫМ и датьвывод определенных заголовочных файлов, например:

Частичный

#views/elements/_custom_header.rb
<% content_for :header_includes do %>
   <% headers.each do |type, value| %>
       <% if type == "java" %>
           <%= javascript_include_tag value %>
       <% else %>
           <%= stylesheet_link_tag value %>
       <% end %>
   <% end %>
<% end %>

Вид

#views/profiles/index.html.erb
<%= render :partial => 'elements/custom_header', locals: { :headers => [["java", "profile_custom"], ["stylsheeet", "profile_custom"]] } %>
#Resume standard view code here

Макет

#layouts/default.rb
<html>
<head>
  <title>Site Title</title>
    <%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" %>
    <%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.10/jquery-ui.min.js" %>
    <%= javascript_include_tag "application" %>
    <%= stylesheet_link_tag "main" %>
    <%= stylesheet_link_tag "reset" %>

    <%= yield :header_includes %>

    <%= csrf_meta_tag %>
</head>

<body>
 <%= yield %>
</body>
</html>

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

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