2013-01-18 2 views
5

Рассматривая некоторые курсы для начинающих, я вижу, что термины используются отдельно, но я думаю, что понимаю только макет. Насколько мне известно, макет - это временная часть кода (например, правый раздел навигации, div, содержащий объявление или что-то подобное), а частичный - это частичный шаблон, но что такое шаблон и как он отличается от макет?Шаблон, Partials и макеты в Rails?

Можете ли вы дать определение всех трех отношений друг с другом, если это возможно? (Т.е. шаблон .... и есть два вида, обертоны и макеты .... макеты конкретных типов шаблонов или любой другой ответ)

Пожалуйста, исправьте мое предположение, если это необходимо ...

В Railscasts 294 с использованием pjax макеты явно дифференцированы генератором случайных чисел, и именно поэтому я потерялся.

Я пытаюсь сделать одну страницу доступной через App/Verb/noun, где я могу «захватить» или «отобразить» «фотографии», «видео», «изображения» и т. Д. (Приложение/захватывает/фото или приложение/захваты/видео или приложение/дисплеи/фотографии и т. д.), и я пытаюсь сделать только одно изменение div, основанное на том, когда я «захватываю» разные вещи .... и я теряюсь в формулировке, или я получить действительно близко, но я действительно не понимаю, что я делаю.

ответ

2

От http://www.tutorialspoint.com/ruby-on-rails/rails-layouts.htm: макет определяет окружение HTML-страницы. Это место, где можно определить общий внешний вид конечного результата. Файлы макетов находятся в приложениях/представлениях/макетах.

Шаблон - общий термин для файлов вида. Шаблон представления - находящийся в приложении/views/folder - будет отображаться в макете.

Лучший ресурс для понимания того, как Rails виды работы является рубин на странице Rails Guides на макетах и ​​Rendering: http://guides.rubyonrails.org/layouts_and_rendering.html

+0

Итак, макеты - это конкретные типы шаблонов? Это сделает все дочерние файлы из папок в 'app/views /' except 'layout' шаблоном? –

+0

Yup, макеты - это конкретные типы шаблонов. Могут быть несколько файлов макета; который отображается, зависит от конфигурации в контроллерах. 'app/views/layouts/application.html.erb - это макет, используемый в приложении. Другие макеты могут быть явно вызваны с контроллеров. –

+0

и как бы вы определили частичное, поскольку оно относится к двум другим? –

14

Я знаю, что это старый вопрос, но я задавался вопросом то же самое. В руководствах нет четкого объяснения различий между макетами и представлениями, и нет четкого объяснения отношений. Чтобы добавить к путанице, термин «шаблон» часто используется для обоих. Как кто-то, кто программировал Smalltalk в 90-х годах (но новичок в Rails), я глубоко понимаю MVC и понимаю некоторые из многих способов его реализации, поэтому моя путаница была не с той частью. Там просто отсутствует фрагмент контекста о представлениях, макетах и ​​шаблонах и о том, как они соотносятся друг с другом.

Вот как я пришел, чтобы понять:

Начните с упрощенным понимания и примером, так что отношения и роль каждой части ясно:

  • вид есть «вещи для отображения "для конкретного контроллера для ответа на действие (которое помещает его в определенное состояние). A view - это снимок вашей модели в определенном состоянии, для конкретного действия (причина/контекст). Речь идет о информации и состоянии, не обязательно о «хорошо выглядящем».
  • a макет имеет конкретную информацию о , как что-то будет отображаться. Он может иметь разметку (CSS, HTML и т. Д.), В которой содержатся инструкции о том, как что-то будет организовано (эта часть здесь, эта часть там, те, которые находятся внизу, эти float вверху, это навигационная информация, это это H1, это H3, это определение.), И как это будет выглядеть (влево, вправо, вверх, вниз, красный, зеленый, подчеркнул, сверкая, скрытые, большие, маленькие, Helvetica и т.д.) Think "L ayout и L ooking Хорошо"

Скажем, у вас есть модель контракта и контроллер, и у вас есть файл, который определяет вид: 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 %> 

Ваш макет файл будет иметь более подробную информацию о HTML (предполагается, что вывод HTML) и особенности о том, как вы хотите, чтобы вещи выглядели. Возможно, у вас есть контроллер и вид, который определен для того, что (и как) клиент видит в этом контракте. У вас есть файл макет для этого конкретного контроллера и это выглядит следующим образом: 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> 

* [Это совершенно надуманный пример, так что я могу сделать отношения между зрением и макетом ясно. Очевидно, что вещи будут моделироваться и выражаться по-разному в реальном мире. ] *

вид обеспечивает ввод (части содержимого) макета. Представления предназначены для действий контроллера и называются соответственно. (Пример: показать, отредактировать, индексировать и т. Д.)

Макеты указаны для контроллера, который используется для их рендеринга. (Пример: применение - для ApplicationController, контракт - для ContractController, contract_customers_view - для ContractCustomersViewController)

Где он начинает запутаться в том, что вид может также иметь информацию макет в Это. Иногда есть только файл вида (без файла макета). И любой из них может быть написан на языке шаблонов (например, ERb или HAML), и поэтому они могут быть названы шаблоном .

A частично - это действительно то, что он говорит: это просто кусок, который можно использовать (и, надеюсь, снова использовать). Вы можете взять часть вида или компоновки и перегруппировать его, чтобы вы могли повторно использовать его - теперь это частично. Обычное использование частичных элементов включает раздел главы, разделы навигации (включая верхний колонтитул, нижний колонтитул и т. Д.), Места, где вы можете повторно использовать повторное использование, а также улучшать стиль и читаемость кода, используя их для семантических и логических разделов. (Вот почему люди сравнивают их с подпрограммой.)

Другое место, где вы можете получить некоторый контекст о представлениях и макетах и ​​о том, как они отличаются, - это шаги (поток), которые ActionView выполняет, чтобы сделать что-то, используя все эти части. Важно понимать, когда макет (или нет) создан, например, поэтому вы понимаете, какие переменные и параметры доступны или недоступны вам в определенное время. (я работаю с Rails 4, кстати.)

Учитывая все это, теперь представьте, что все ваши данные макета в ваших взглядах, и что ваши взгляды написаны на языке шаблона (ERB, HAML и т. Д.), И что вы использовали партитуры, чтобы все было лучше.У вас может не быть файлов макетов, кроме одного основного для вашего приложения, которое имеет большой yield, в котором находится реальный контент (созданный вашими контроллерами &).

Надеюсь, это поможет кому-то еще получить ручку на просмотрах и макетах. (И я полагаю, я должен предложить положить что-то подобное в руководства.)

Смежные вопросы