【问题标题】:Get erb view from inside layout从内部布局获取erb视图
【发布时间】:2013-08-26 07:47:18
【问题描述】:

我正在尝试将当前视图的名称加载到layout.erb。我正在尝试将 js 文件和 css 文件注入布局头。我正在根据 erb 视图的名称为这些文件命名:

<link rel="stylesheet" href="/devcss/<%= viewName%>.css">
<script src="/devjs/<%= viewName %>.js" type="text/javascript"></script>

如何从布局模板执行此操作?

更新:我对知道如何将脚本注入布局中的特定位置不感兴趣,我认为 content_for 用于。在上面的例子中我需要知道的是如何确定 viewName 变量

【问题讨论】:

    标签: ruby sinatra erb


    【解决方案1】:

    head标签后的application.html.erb中插入以下内容

    <%= "#{yield(:scripts)}".html_safe if content_for?(:scripts) %>
    

    并在单个erb中,插入类似于以下内容

    <% content_for :scripts do %>
        <link rel="stylesheet" href="/devcss/<%= viewName%>.css">
        <script src="/devjs/<%= viewName %>.js" type="text/javascript"></script>
    <% end %>
    

    这将允许您将页面特定代码插入到您的个人 erb 无法访问的 head 和其他标签中

    【讨论】:

    • 我知道我可以将参数传递给我的 erb,我只是想知道是否有一种简单的方法可以让布局知道包含哪个 erb
    • content_for 来自 Rails,而不是 Sinatra。 Sinatra 没有开箱即用的content_for,您需要使用Sinatra::Contrib 中的ContentFor extension 之类的东西,它使用yield_content 而不是yield
    • if :scripts 也将始终为真,因为:scripts 是一个符号。我猜你的意思是测试模板是否为那个符号添加了内容,我不知道在 Rails 中是否有办法做到这一点。
    • @matt 是正确的,我已更新代码以使用 content_for?
    猜你喜欢
    • 2013-07-26
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多