帮助我理解Sinatra中的动态布局

时间:2010-03-17 19:47:18

标签: ruby-on-rails sinatra haml

帮我理解这一点;我正在学习Sinatra(和Rails一样,呃,和Ruby)。

说我在做一个搜索应用程序。搜索表单在一个div中排列,结果将在另一个div中排列。搜索表单由前一个视图(可能来自登录表单)呈现到div中。

我想处理表格参数,执行搜索,并将结果渲染到结果div中。

如果我在布局中有一个“yield”并从不同视图渲染div,则结果div会在渲染时删除搜索div。

如果我在默认布局中定义div,那么只渲染内容,显然布局会搞砸:必须有两个“收益”,我不认为Sinatra支持将块传递给收益。

我试过了foca的sinatra-content-for plugin,这似乎更接近我的需要。但我无法弄清楚在哪里放置“yield_content”语句。

如果我的布局中有这个haml:

#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 个答案:

答案 0 :(得分:1)

我认为你的意思是你总是希望显示2个div,但是在新搜索中它们应该是空的,并且在结果页面上应该填充它们。您可以使用一个haml模板离开,只需在请求方法上填充它:

get "/search" do
    # render haml
end

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

(抱歉这是非常伪的......不是在真正的计算机上。)