【问题标题】:Globally override default layout option in render method Sinatra在渲染方法 Sinatra 中全局覆盖默认布局选项
【发布时间】:2013-12-25 03:51:31
【问题描述】:

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

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

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

你会建议我如何解决这个问题?我应该打开 Sinatra::Base 并覆盖渲染方法吗?如果是这样,怎么做?有没有一种好方法可以编写一个 before 过滤器来检查传入的请求是否是 AJAX 请求?我觉得我已经尝试了所有我能做的事情,但我仍然没有得到 :layout => false if request.xhr 的期望输出?是真的

任何想法将不胜感激:)

【问题讨论】:

    标签: ajax sinatra erb


    【解决方案1】:

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

    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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-02
        • 2022-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多