2013-12-07 107 views
0

我從AJAX視圖加載div內容。我想在我的erb方法中設置:layout => false如果request.xhr?是真的。我有:全局覆蓋渲染方法中的默認佈局選項Sinatra

get '/' do 
    erb :index, :layout => !request.xhr? 
end 
在我所有的航線

...但是這(!?佈局=> request.xhr)變得重複,我要幹這個。

你會如何解決這個問題?我應該打開Sinatra :: Base並重寫渲染方法嗎?如果是這樣,怎麼樣?有沒有一種好的方法來編寫一個之前的過濾器來檢查進來的請求是否是AJAX請求?我覺得我已經試過了我所能做的一切,但我仍然沒有得到所需的輸出:layout => false request.xhr?是真的

任何想法,將不勝感激:)

回答

3

寫一個輔助方法乾涸代碼(簡單的解決方案,這難倒並沒有馬上來找我):

helpers do 
    def render_erb(template) 
    erb template, :layout => !request.xhr? 
    end 
end 

現在該指數的路線是這樣的:

get '/' do 
    render_erb :index 
end 
2

您還可以使用before過濾器,或在config設置佈局:

configure :production, :development do 
    set :layout, !request.xhr? 
end 

# or 

before do 
    set :layout, !request.xhr? 
end