ruby-on-rails - Rails 3 嵌套布局 : how to add at the end?

标签 ruby-on-rails ruby layout

是否可以操纵占位符,以便我不仅可以设置它们的内容,还可以按特定顺序添加/删除内容?例如:

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' %>

现在我想要一个特定 Controller 的布局,它可能需要添加更多 javascript 链接,或者可能完全删除它们。假设我只想在其他 javascripts 之后 添加一个文件。到目前为止,我得到了这个:

layouts/some_controller.html.erb(这是一个特定 Controller 的布局,它应该继承自应用程序布局):

<% 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。

如果必须直接扩展基础布局并跟踪对应用程序布局所做的任何更改以将其也应用到特定于 Controller 的布局,那将是很糟糕的。

处理这种情况的推荐方法是什么?

最佳答案

在application.html.erb中,将content_for:javascripts的内容保留在partial

这里你的部分将有 <%= javascript_include_tag "应用程序"%>

然后,在其他布局中调用相同的部分以及其他 javascript。

另一种方式,

您可以调用一个具有如下散列的助手: js_files = {"application_controller"=> ["js_file_1"], "some_controller"=> ["js_file_1","js_file_2"]}

现在,获取 js 文件并在运行时根据内容中的 Controller 构造 javascript include 标记。

希望这会更加灵活。 抱歉没有格式化。

关于ruby-on-rails - Rails 3 嵌套布局 : how to add at the end?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9442207/

相关文章:

ruby - 在 RubyGem 中要求文件的正确方法?

ruby - 学习 MacRuby 的好资源

ruby-on-rails - 如何遍历年和周

c# - 在 C# 中为面板创建布局时遇到问题

android - Textview/EditView 多行仅在换行符处换行

android - android中的跑马灯

ruby-on-rails - 仅将字符串的第一个字符大写并保留其他字符? ( rails )

ruby-on-rails - 如何使 ID 成为 Rails 中的随机 8 位字母数字?

ruby-on-rails - 为什么当我尝试将对象保存到数据库时 Rails 函数测试失败

ruby-on-rails - 防止在非 active_admin 页面上加载事件管理资源