2011-09-22 31 views
10

Nếu tôi có một thẻ <%= yield %> thì tất cả các chế độ xem của tôi sẽ hiển thị ở cùng một vị trí trong bố cục. Tôi có thể có các thẻ <%= yield %> khác nhau cho các chế độ xem khác nhau không? Vậy làm thế nào để tôi làm điều này? Cảm ơnRuby on rails: Hiển thị các chế độ xem cụ thể ở một vị trí cụ thể trong bố cục

+0

Có quan trọng đối với thư mục mà chế độ xem có nội dung không? Điều gì về bộ điều khiển xem là từ đâu? – holaSenor

Trả lời

22

Nhìn vào ActionView::Helpers::CaptureHelper. Bạn có thể làm một cái gì đó như thế này trong quan điểm của bạn:

<% content_for :sidebar do %> 
    <!-- sidebar content specific to this page --> 
<% end %> 

này sẽ chạy mẫu bên trong khối content_for, nhưng sẽ không ra như một phần của thường xuyên mẫu yield đệm, nó sẽ được lưu trữ trong một bộ đệm riêng cho sau này . Rồi sau này, kể cả trong bố trí, bạn có thể sử dụng yield :content_name để sản xuất các nội dung:

<div class="content"> 
    <%= yield %> 
</div> 

<div class="sidebar"> 
    <%= yield :sidebar %> 
</div> 

Vì vậy, trong một cảm giác bạn có thể có khác nhau yield s cho quan điểm khác nhau, bạn chỉ cần cung cấp cho các nội dung khác nhau một tên với content_for trong các chế độ xem và cho nó có cùng tên đó trong bố cục.

Cân nhắc trường hợp của bạn, nơi bạn muốn có các chế độ xem khác nhau ở những nơi khác nhau. Giả sử bạn có ba bảng, panel1, panel2 và panel3. Bạn có thể thực hiện việc này trong bố cục của mình:

<div id="panel1"><%= yield :panel1 %></div> 
<div id="panel2"><%= yield :panel2 %></div> 
<div id="panel3"><%= yield :panel3 %></div> 

Bạn thậm chí không cần bao gồm đồng bằng <%= yield %> nếu bạn không muốn. Sau đó, trong chế độ xem của bạn, bạn có thể chọn bảng để hiển thị nội dung bằng cách bao quanh toàn bộ chế độ xem với content_for thích hợp. Ví dụ, một trong những quan điểm của bạn có thể được thay đổi như thế này:

<% content_for :panel2 do %> 
    <!-- Your View --> 
<% end %> 

Để hiển thị trong bảng 2. Một số khác có thể được dành cho bảng 3, như thế này:

<% content_for :panel3 do %> 
    <!-- Your View --> 
<% end %> 
+0

Điều này phù hợp cho tiêu đề trang, nơi bạn muốn tùy chỉnh hầu hết trang Egbert, nhưng bạn phải chỉ định nó trong mọi trang. Điều đó làm cho nó không tốt cho các công cụ như ẩn sidebars trên các trang xác thực mà thôi. – ahnbizcad

1

Có, bạn có thể có nhiều thẻ <%= yield %>. Bạn có thể chỉ định từng thẻ yield với các tên như vậy trong chế độ xem cơ sở.

<%= yield :head %>

<%= yield :footer %>

Sau đó, sử dụng thẻ content_for trong quan điểm cá nhân của bạn.

<% content_for :head do %> 
    <%= stylesheet_link_tag 'custom' %> 
<% end %> 
0

Bạn có thể sử dụng năng suất và nội dung cho:

For example: 
<%= yield :head %> 
<% content_for :head do %> 
    <title>A simple page</title> 
<% end %> 
Các vấn đề liên quan