2010-03-17 28 views
1

幫我理解這一點;我正在學習Sinatra(和Rails,呃,Ruby)。幫我理解Sinatra的動態佈局

說我正在做一個搜索應用程序。搜索表格分爲一格,結果將在另一格中列出。搜索表單通過前一個視圖呈現爲div(可能來自登錄表單)。

我想處理表單參數,執行搜索,並將結果呈現到結果div中。

如果我在佈局中有一個「yield」並從不同的視圖渲染div,則結果div將在呈現時擦除搜索div。

如果我在默認佈局中定義div,那麼只需渲染內容,顯然佈局會搞亂:必須有兩個「yield」,我不認爲Sinatra支持將塊傳遞給yield 。

我試過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被清空。我想保留它。難道我做錯了什麼?我應該如何設置?

+0

如何你是否呈現結果視圖? Ajax,刷新頁面? – Beffa 2010-03-18 12:58:55

回答

1

我認爲你的意思是你總是想顯示2個div,但在新的搜索中,他們應該是空的,並且在結果頁面上應該填充它們。你也許可以逃脫W /一個HAML模板,只需填充它diff'tly的請求方法:

get "/search" do 
    # render haml 
end 

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

(抱歉,這很假......沒有一個真正的電腦。)

+0

謝謝。雅我最終明白了這一點:-) – thermans 2010-06-01 13:37:54