【问题标题】:Rails Views: How do you pass a variable to a partial layout?Rails 视图:如何将变量传递给部分布局?
【发布时间】:2011-04-01 22:06:30
【问题描述】:

在我的一个观点中,我将布局应用于代码块:

# In app/views/sessions/new.html.erb
<% render :layout => 'home/shadow_box' do %>
  #... code for sign in form here
<% end %>

布局是一个四边都有 png 阴影的 div。

由于我在整个站点中都使用此布局,因此我想将一个变量传递给指定阴影 div 宽度的布局。我尝试在代码块中使用内容:

# In app/views/sessions/new.html.erb
<% render :layout => 'home/shadow_box' do %>
  <% content_for :box_width %>640<% end %>
  #... code for sign in form here
<% end %>

# In app/views/home/_shadow_box.html.erb
<div class="shadow-one" style="width:<%= yield :box_width %>;">
  <div class="corner-a"></div>
  <div class="corner-b"></div>
  <div class="shadow-two">
    <div class="shadow-three">
      <div class="shadow-four">
        <%= yield %>
      </div>
    </div>
  </div>
</div>

这不起作用,而是导致整个代码块的双重渲染。

解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: ruby-on-rails views partials layout


    【解决方案1】:

    想通了。

    来自 API:“您还可以在一个布局中多次生成并使用块参数来区分各个部分。”

    解决方案:

    # In app/views/sessions/new.html.erb
    <% render :layout => 'home/shadow_box' do | section | %>
      <%- case section when :box_width -%>
        #width goes here. I.e., 640px
      <%- when :content -%>
        #code block goes here
      <% end -%>
    <% end %>
    
    #In app/views/home/_shadow_box.html.erb
    <div class="shadow-one" style="width:<%= yield :box_width %>;">
      <div class="corner-a"></div>
      <div class="corner-b"></div>
      <div class="shadow-two">
        <div class="shadow-three">
          <div class="shadow-four">
            <%= yield :content %>
          </div>
        </div>
      </div>
    </div>
    

    【讨论】:

      【解决方案2】:

      首先您需要了解layoutspartials 之间的区别。部分通常来自视图,但如果您使用 ajax,也可以从控制器中使用。布局几乎总是在控制器中使用。

      首先在应用程序/ 等共享文件夹中创建一个文件,然后在此文件夹中放置一个文件,您可以随意调用它,但它会包含您想要在整个站点中包含的材料。然后,当您将变量传递给局部变量时,它在局部变量中被称为局部变量。还有部分你不需要说render :partial =&gt;你只需输入render 'application/some_file'

      所以从你想要的观点来看:

      <%= render 'application/your_file', :div_size => '600' %>
      

      然后从application/your_file.html.erb等文件夹中的部分执行此操作:

      <div style="width:<%= div_width %>px;">
         content
      </div>
      

      【讨论】:

      • 我理解 btwn 布局和部分布局的区别......我不是在谈论为整个操作全局指定的布局类型。部分在这里不适合我的需求,因为我拥有的是一个容器(用于制作阴影容器的几个 div),我想将任何内容放入其中,无论是代码块还是部分(即渲染“库存/显示” , :layout => 'shadow_box')。
      猜你喜欢
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多