Помогите мне понять динамические макеты в Синатре - PullRequest
1 голос
/ 17 марта 2010

Помогите мне понять это; Я изучаю Синатру (и Rails в этом отношении, и Руби).

Скажи, что я делаю приложение для поиска. Форма поиска выложена в одном разделе, а результаты - в другом. Форма поиска отображается в div с помощью предыдущего представления (возможно, из формы входа).

Я хочу обработать параметры формы, выполнить поиск и отобразить результаты в div результатов.

Если у меня есть один «yield» в макете и я отображаю div из разных представлений, div результатов стирает div поиска при его рендеринге.

Если я определю div в макете по умолчанию, то просто отобразлю содержимое, очевидно, макет будет испорчен: должно быть два «выхода», и я не думаю, что Синатра поддерживает передачу блоков в выходы.

Я попробовал плагин sinatra-content-for для foca , и это, кажется, ближе к тому, что мне нужно. Но я не могу понять, где разместить операторы yield_content.

Если у меня есть этот хамл в моем макете:

#search
  -# search form
  = yield_content :search
#results
  -# search results
  = yield_content :results

... это в моем поиске:

 - content_for :search do
 %form{:method => "post"... etc.

... и это в результатах просмотра:

- content_for :results do
%table{:class => 'results'... etc.

Такого рода работы, но когда я рендеринг просмотра результатов, div поиска очищается. Я хотел бы, чтобы это осталось. Я делаю что-то неправильно? Как мне это настроить?

1 Ответ

1 голос
/ 31 мая 2010

Я думаю, вы имеете в виду, что вы ВСЕГДА хотите показать 2 деления, но в новом поиске они должны быть пустыми, а на странице результатов они должны быть заполнены. Вы, вероятно, можете выбрать один шаблон haml и просто заполнить его по методу запроса:

get "/search" do
    # render haml
end

post "/search" do
    # set instance variables: @search & @results
    # run search
    # render haml
end

(Извините, это очень псевдо ... не на реальном компьютере.)

...