Rails 3 вложенных макета: как добавить в конец? - PullRequest
3 голосов
/ 25 февраля 2012

Можно ли манипулировать заполнителями, чтобы я мог не только устанавливать их содержимое, но и добавлять / удалять содержимое в определенном порядке? Например:

layouts / base.html.erb (базовый макет должен быть расширен):

<!DOCTYPE html>
<html>
    <head>
    <title><%= yield :title %></title>
    <%= yield :stylesheets %>
    <%= yield :javascripts %>
    <%= yield :csrf %>
    </head>
    <body>

    <div class='container-fluid'>
      <%= yield :header %>

      <%= content_for?(:content) ? yield(:content) : yield %>

      <%= yield :footer %>
    </div>
    </body>
</html>

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

<% content_for :stylesheets do %>
  <%= stylesheet_link_tag    "application", :media => "all" %>
<% end %>

<% content_for :javascripts do %>
  <%= javascript_include_tag "application" %>
<% end %>

<% content_for :csrf do %>
  <%= csrf_meta_tags %>
<% end %>

<%= render :template => 'layouts/base' %>

Теперь я хочу макет для конкретного контроллера, который может потребовать добавить больше ссылок javascript или, возможно, полностью удалить их. Допустим, я хочу добавить только один файл после других javascripts. Пока я получил это:

layouts / some_controller.html.erb (это макет для конкретного контроллера, он должен наследоваться от макета приложения):

<% content_for :javascripts do %>
  <script src="/assets/some_javascript_that_depends_on_jquery.js" type="text/javascript"></script>
<% end %>

<%= render :template => 'layouts/application' %>

Это не сработает, потому что это поместит some_javascript_that_depends_on_jquery.js в начало заполнителя: javascripts, и мне это нужно в конце, потому что это зависит от jquery.

Было бы плохо, если бы пришлось напрямую расширять базовую компоновку и отслеживать любые изменения, внесенные в компоновку приложения, чтобы применить ее и к компоновке для конкретного контроллера.

Каков рекомендуемый способ справиться с этой ситуацией?

Ответы [ 3 ]

0 голосов
/ 25 февраля 2012

Всегда сохраняйте один файл js на контроллер.

<%= javascript_include_tag params[:controller] %>

Давайте рассмотрим пример контроллера users, тогда будет файл users.js.coffee.

Если вы хотите иметь несколько js-файлов для контроллера пользователей, вам могут потребоваться эти файлы в файле users.js.coffee

vi users.js.coffee

//= require 'a'
//= require 'b'

/* my extra js code will go here */
0 голосов
/ 27 февраля 2012

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

Rails вроде заставляет вас упростить процесс.

0 голосов
/ 25 февраля 2012

В application.html.erb Хранить содержимое content_for: javascripts в частичном

Здесь ваш частичный будет иметь <% = javascript_include_tag "application"%>

Затем вызовите тот же фрагмент в дополнение к другим javascript-кодам в другом макете.

Другой способ,

Вы можете вызвать одного помощника, у которого будет такой хеш: js_files = {"application_controller" => ["js_file_1"], "some_controller" => ["js_file_1", "js_file_2"]}

Теперь получите файлы js и создайте тег включения javascript во время выполнения на основе контроллера в вашем контенте для.

Надеюсь, это будет более гибким. Извините, что не отформатировал.

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