2010-03-17 4 views
1

이해해주세요. 나는 Sinatra (그리고 그 문제, 어, Ruby에 대한 Rails)를 배우고있다.Sinatra의 동적 레이아웃을 이해하는 데 도움이됩니다.

내가 검색 앱을 사용 중입니다. 검색 양식은 하나의 div에 배치되고 결과는 다른 div에 배치됩니다. 검색 양식은 이전보기 (아마도 로그인 양식에서)로 div로 렌더링됩니다.

양식 params를 처리하고 검색을 수행하며 결과 div에 결과를 렌더링하고 싶습니다.

레이아웃에 하나의 "출력"이 있고 다른보기에서 div를 렌더링하는 경우 결과 div는 렌더링 할 때 검색 div를 지 웁니다.

기본 레이아웃에서 div를 정의한 다음 내용을 렌더링하면 분명히 레이아웃이 엉망이 될 것입니다. 두 개의 "yields"가 있어야하고 Sinatra가 블록을 양보하도록 지원하지 않는다고 생각합니다 .

나는 foca의 sinatra-content-for plugin을 시도했는데, 이것이 내가 필요한 것에 더 가깝게 보인다. 그러나 "yield_content"문을 어디에 둘 것인지 알아낼 수는 없습니다.

내 레이아웃이 HAML가있는 경우 :

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

...이 내 검색보기 :

- content_for :results do 
%table{:class => 'results'... etc. 
: 결과보기에서

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

이런 종류의 작동하지만 결과보기를 렌더링 할 때 검색 div 비워집니다. 나는 그것을 남겨두고 싶다. 내가 뭔가 잘못하고 있는거야? 어떻게해야합니까?

+0

어떻게

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

결과보기를 렌더링합니까? 아약스, 새로 고침 페이지? – Beffa

답변

1

항상 2 개의 div를 표시하고 싶지만 새 검색에서는 비어 있어야하며 결과 페이지에는 채워 져야한다고 생각합니다. 당신은 아마 멀리 한 HAML 템플릿/w 얻고, 단지 요청 방법에 diff'tly을 채울 수 있습니다 : (죄송이 아닌 실제 컴퓨터에 ... 매우 유사하다.)

+0

감사합니다. 그래, 나는 결국 그것을 알아 냈다 :-) – thermans

관련 문제