全局覆盖渲染方法Sinatra中的默认布局选项

时间:2013-12-07 21:27:47

标签: ajax sinatra erb

我正在使用AJAX从视图中加载div内容。我想设置:layout =>如果request.xhr,我的erb方法是假的?是真的。我有:

get '/' do
  erb :index, :layout => !request.xhr?
end

在我的所有路线中...但是这个(:layout =>!request.xhr?)变成了重复,我想干掉它。

你怎么建议我补救这个?我应该打开Sinatra :: Base并覆盖render方法吗?如果是这样,怎么样?是否有一种很好的方法来编写一个前置过滤器来检查进来的请求是否是一个AJAX请求?我觉得我已经尝试了所有我能做的但是我仍然没有得到所需的输出:layout =>如果request.xhr,则为false?是真的

非常感谢任何想法:)

2 个答案:

答案 0 :(得分:3)

写了一个帮助方法来干掉代码(简单的解决方案,令我感到困惑的是,这并没有立即找到我):

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

现在索引路线如下:

 get '/' do
   render_erb :index
 end

答案 1 :(得分:2)

您还可以使用before过滤器,或在config中设置布局:

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

# or

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