加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 同一页面上的多个content_for

发布时间:2020-12-16 22:07:40 所属栏目:百科 来源:网络整理
导读:我在我的应用程序中有大块的 HTML,我想进入共享模板,然后使用content_for和yield来插入必要的内容.但是,如果我在同一个布局文件中多次使用它,则content_for只会附加到之前的那个想法不能很好地工作.这个问题有方法解决吗? div class="block side" div class
我在我的应用程序中有大块的 HTML,我想进入共享模板,然后使用content_for和yield来插入必要的内容.但是,如果我在同一个布局文件中多次使用它,则content_for只会附加到之前的那个想法不能很好地工作.这个问题有方法解决吗?
<div class="block side">
    <div class="block_head">
        <div class="bheadl"></div>
        <div class="bheadr"></div>
        <h2><%= yield :block_head %></h2>
    </div>
    <div class="block_content">
        <%= yield :block_content %>
    </div>
    <div class="bendl"></div>
    <div class="bendr"></div>
</div>

我使用以下代码设置块的内容

<%= overwrite_content_for :block_head do -%>
        My Block
    <% end -%>
    <%= overwrite_content_for :block_content do -%>
        <p>My Block Content</p>
    <% end -%>
    <%= render :file => "shared/_blockside" %>

问题是如果我在同一布局上多次使用它,原始块中的内容将附加到辅助块

我已经尝试创建一个自定义帮助方法来解决它,但它不会返回任何内容

def overwrite_content_for(name,content = nil,&block)
    @_content_for[name] = ""
    content_for(name,content &block)
  end

我可能也会对此完全错误,如果有更好的方法可以让内容像我一样工作,我想知道.谢谢.

解决方法

您应该将overwrite_content_for定义如下(如果我正确理解您的问题):
def overwrite_content_for(name,&block)
    content = capture(&block) if block_given?
    @_content_for[name] = content if content
    @_content_for[name] unless content
  end

请注意,如果您的块产生nil,则将保留旧内容.然而,整个想法听起来不太好,因为你显然做了两次渲染(或至少是对象实例化).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读