2010-08-20 111 views
1

在我的观点一个我应用布局的代码块:Rails视图:如何将变量传递给局部布局?

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

布局是具有四面PNG阴影核实。

由于我在我的网站上使用这种布局,我想将一个变量传递给指定阴影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> 

这没有奏效,而是导致整个代码块的双渲染。

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

回答

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> 
0

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

首先在共享文件夹(例如application /)中创建一个文件,并在该文件夹中放一个文件调用它,不管你想要什么,但它将包含你想要包含在你的网站中的所有材料。然后,当你将一个变量传递给一个局部变量时,它将被局部调用。也有谐音你不需要说render :partial =>你只要把render 'application/some_file'

所以从你想这个观点:

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

然后从文件夹中的部分如application/your_file.html.erb做到这一点:

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

我明白btwn布局和谐音的区别......我不是在谈论整个行动在全球指定的这种布局。部分不适合我的需要在这里,因为我有一个容器(几个div来制作一个阴影容器),我想扔任何东西,无论是代码块还是部分(即渲染'库存/展示' ,:layout =>'shadow_box')。 – telecasterrok 2010-08-21 00:14:51

相关问题