2013-01-18 20 views
5

Xem xét một số khóa học khởi động, tôi thấy rằng các điều khoản được sử dụng riêng biệt, nhưng tôi nghĩ rằng tôi chỉ hiểu bố cục. Theo hiểu biết của tôi, bố cục là một phần mã tạm thời (chẳng hạn như phần điều hướng bên phải, một div chứa quảng cáo hoặc thứ gì đó tương tự) và một phần là một phần mẫu, nhưng mẫu là gì và nó khác như thế nào bố cục?Mẫu, Partials và Layouts trong Rails?

Bạn có thể đưa ra định nghĩa của cả ba mối quan hệ với nhau nếu có thể? (tức là một mẫu là .... và có hai loại, partials và bố cục .... bố trí là các loại mẫu cụ thể hoặc bất kỳ câu trả lời là)

Hãy sửa lại giả thiết của tôi nếu cần ...

Trong Railscasts 294 sử dụng pjax, bố cục được phân biệt rõ ràng với trình tạo số ngẫu nhiên và đây là lý do tại sao tôi bị mất.

Tôi đang cố gắng tạo một trang duy nhất được truy cập bởi Ứng dụng/động từ/danh từ, nơi tôi có thể "chụp" hoặc "hiển thị" "ảnh", "video", "hình ảnh", v.v ... (app/chụp/ảnh hoặc ứng dụng/ảnh chụp/video hoặc ứng dụng/hiển thị/ảnh, v.v.) và tôi đang cố gắng thực hiện một thay đổi div dựa trên thời điểm tôi "ghi lại" những thứ khác nhau .... và tôi bị lạc đường hoặc tôi thực sự gần gũi nhưng tôi không thực sự hiểu những gì im đang làm.

Trả lời

2

Từ http://www.tutorialspoint.com/ruby-on-rails/rails-layouts.htm: Bố cục xác định môi trường xung quanh của trang HTML. Đó là nơi để xác định giao diện chung của đầu ra cuối cùng của bạn. Tệp bố cục nằm trong ứng dụng/lượt xem/bố cục.

Mẫu là thuật ngữ chung cho các tệp chế độ xem. Mẫu xem - nằm trong ứng dụng/lượt xem/thư mục - sẽ được hiển thị trong bố cục.

tài nguyên tốt nhất để tìm hiểu cách Rails xem công việc là Ruby on Rails trang Hướng dẫn về Layouts và Rendering: http://guides.rubyonrails.org/layouts_and_rendering.html

+0

Bố cục là loại mẫu cụ thể? Điều này sẽ làm cho tất cả các tệp con của các thư mục trong 'app/views /' ngoại trừ 'layout' một mẫu? –

+0

Yup, bố cục là các loại mẫu cụ thể. Có thể có nhiều tệp bố cục; bố cục được hiển thị phụ thuộc vào cấu hình trong bộ điều khiển. 'app/views/layouts/application.html.erb' là bố cục được sử dụng trên ứng dụng. Các bố trí khác có thể được gọi một cách rõ ràng từ các bộ điều khiển. –

+0

và cách bạn xác định một phần vì nó liên quan đến hai phần còn lại? –

14

Tôi biết đây là một câu hỏi cũ, nhưng tôi đã tự hỏi như vậy. Trong các hướng dẫn, không có giải thích rõ ràng về sự khác biệt giữa bố cục và khung nhìn, cũng như không có giải thích rõ ràng về các mối quan hệ. Để thêm vào sự nhầm lẫn, thuật ngữ 'mẫu' thường được sử dụng cho cả hai. Là một người lập trình Smalltalk trong những năm 90 (nhưng là mới với Rails), tôi hiểu sâu sắc MVC và hiểu một số cách mà nó được thực hiện - vì vậy sự nhầm lẫn của tôi không phải với phần đó. Chỉ có một phần thiếu bối cảnh về các khung nhìn, bố cục và các mẫu và cách chúng có liên quan với nhau.

Đây là cách tôi đã hiểu nó:

Bắt đầu với một đơn giản hiểu biết và gương sáng để các mối quan hệ và vai trò của mỗi phần là rõ ràng:

  • một xem là 'thứ được hiển thị 'cho một bộ điều khiển cụ thể để đáp ứng với một hành động (mà đặt nó vào một trạng thái cụ thể). A xem là ảnh chụp nhanh mô hình của bạn tại một trạng thái cụ thể, cho một hành động cụ thể (lý do/ngữ cảnh). Đó là về thông tin và trạng thái, không nhất thiết phải về 'tìm kiếm tốt'.
  • cách bố trí có thông tin cụ thể về cách hiển thị nội dung nào đó. Nó có thể có đánh dấu (CSS, HTML, v.v.) cung cấp hướng dẫn về cách tổ chức một thứ gì đó (phần này ở đây, phần đó ở đó, phần ở phía dưới, những phao ở trên cùng, đó là thông tin điều hướng, là H1, đó là H3, đây là định nghĩa ..) Và làm thế nào nó sẽ xem xét (trái, phải, lên, xuống, đỏ, xanh lá cây, nhấn mạnh, nhấp nháy, ẩn, lớn, nhỏ, Helvetica, vv) Think "L ayout và L ooking Tốt"

giả sử bạn có một mô hình hợp đồng và điều khiển, và bạn có một tập tin mà xác định xem: view/contracts/show.htm.erb:

<% content_for :full_identification do %> 
     <p><%= contract.display_name %> <%=contract.full_id_number %> </p> 
    <% end %> 

    <% content_for :summary do %> 
     <p> This is the summary for <%= contract.simple_name %>. You hire us. We give you coolness. You pay us.</p> 
    <% end %> 

    <% content_for :client_info do %> 
    <div class="client-info"> 
     <p><span class="contract-title">Client: <%= contract.client_name%></span></p> 
     <p>Address: <%= contract.client_address%></p> 
     <p>Phone: <%= contract.client_phone %> </p> 
     ... more info about the client.... 
    </div> 
    <% end %> 

    <% content_for :scope_of_work_statement do %> 
    <p class="scope-of-work-statement"><%= contract.scope_of_work%>:</p> 
    <% end %> 

bố trí của bạn tập tin sẽ có thêm chi tiết về HTML (giả sử đầu ra HTML) và cụ thể về cách bạn muốn mọi thứ trông như thế nào. Có thể bạn có bộ điều khiển và chế độ xem cụ thể cho những gì (và cách thức) khách hàng thấy hợp đồng đó. Bạn có một file layout cho rằng điều khiển cụ thể và nó trông như thế này: layouts/contracts/contracts_clients_view.htm.erb

<div class="tab-pane fade in" > 
    <div class="span7 highlight > 
     <%= yield :full_identification %> 
     <div class="no-breaks reflow" > 
     <%= yield :summary%> 
     </div> 
    </div> 

    <div class="span5 scope-of-work-statement"> 
     <h3>Scope of Work Statement</h3> 
     <%= yield :scope_of_work_statement %> 
     </div> 
    </div> 
</div> 

* [Đây là một ví dụ hoàn toàn giả tạo vì vậy mà tôi có thể làm cho mối quan hệ giữa xembố trí rõ ràng. Rõ ràng mọi thứ sẽ được mô hình hóa và thể hiện khác nhau trong thế giới thực. ] *

Chế độ xem cung cấp đầu vào (phần nội dung) cho bố cục. Chế độ xem dành cho các hoạt động của bộ điều khiển và được đặt tên phù hợp. (Ví dụ: hiển thị, chỉnh sửa, lập chỉ mục, v.v.)

Bố cục được đặt tên cho bộ điều khiển được sử dụng để hiển thị chúng. (Ví dụ: ứng dụng - cho ApplicationController, hợp đồng - một ContractController, contract_customers_view - cho một ContractCustomersViewController)

đâu nó bắt đầu để có được rối là một xem cũng có thể có thông tin bố trí trong nó. Đôi khi chỉ có tệp xem (không có tệp bố cục). Và cả hai có thể được viết bằng ngôn ngữ mẫu (như ERb hoặc HAML) và do đó, cả hai có thể được gọi là mẫu .

A một phần thực sự là những gì nó nói: nó chỉ là một phần có thể được sử dụng (và hy vọng tái sử dụng). Bạn có thể chụp một phần chế độ xem hoặc bố cục và thêm lại yếu tố đó để bạn có thể sử dụng lại - bây giờ là một phần. Việc sử dụng partials chung bao gồm phần đầu, phần điều hướng (bao gồm đầu trang, chân trang, v.v.), nơi bạn có thể tái sử dụng, và cải thiện kiểu mã hóa và khả năng đọc bằng cách sử dụng chúng cho các phần ngữ nghĩa và logic. (Đó là lý do tại sao mọi người so sánh chúng với một chương trình con.)

Một nơi khác mà bạn có thể nhận được một số bối cảnh về bố cục và bố cục và cách chúng khác nhau trong các bước (luồng) mà ActionView đi qua để thực sự tạo ra đầu ra - để hiển thị nội dung nào đó bằng cách sử dụng tất cả các phần này. Điều quan trọng là phải hiểu khi nào bố cục được tạo (hoặc không được tạo), chẳng hạn, để bạn hiểu các biến và tham số nào hoặc không có sẵn cho bạn tại một thời điểm cụ thể. (Tôi đang làm việc với Rails 4, btw.)

Với tất cả điều đó, bây giờ tưởng tượng rằng tất cả các thông tin bố trí của bạn là trong quan điểm của bạn, và đó là quan điểm của bạn được viết bằng một ngôn ngữ mẫu (ERb, HAML, v.v.) và bạn đã sử dụng partials để làm mọi thứ tốt hơn.Bạn có thể không có bất kỳ tệp bố cục nào ngoài một tệp chính cho ứng dụng của bạn có số lớn yield trong đó nội dung thực (được tạo bởi bộ điều khiển của bạn & mô hình).

Hy vọng điều này sẽ giúp người khác có được xử lý về lượt xem và bố cục. (Và tôi cho rằng tôi nên đề nghị đưa một thứ như thế này vào trong hướng dẫn.)

Các vấn đề liên quan