怎么超越sinatra布局艰难的方式?

时间:2013-06-13 18:08:26

标签: sinatra

我们的代码中有一些呈现如下:

erb :login, :layout => :layout
<%= erb :_maintabs %>

我只是想将这些代码行改为像这样的一行代码 这会做同样的事情:

erb :login, :layout => Main::get_layout
<%= erb Main::my_tabs %>

这将使我能够编写一些插件来扩展我们的代码,但我工作的人似乎对此并不感兴趣,并且不希望我检查代码中的这些类型的更改。所以我的问题是,有没有办法可以修改sinatra渲染以根据布局名称渲染不同的布局或视图?过度骑行必须在较低的水平上进行。

2 个答案:

答案 0 :(得分:0)

当我在其中一个由register()添加的路由中时,它表明我在Main类中,并且Main有一个erb()方法,所以我想我可以尝试重载它同时保存原始和如果我在中间更改参数,则调用原件。

app.get '/index' do   
  puts '---------------- in idx ---------------------- ' + self.class.to_s
  p self.methods
  erb :index, :layout => :layout, :locals => {:test_runs => test_runs, :tests => tests}
end

答案 1 :(得分:0)

这似乎有效,而且我正在寻找,

我从我的插件

重载主类
class Main


  def my_erb(view,opts={})
    new_view = view
    # puts '--------------------------- in ERB for template: ' + view.to_s

    if view.eql?(:layout)
      new_view = :my_layout
    elsif view.eql?(:_maintabs)
      new_view = :_my_maintabs
    end
    # puts 'view is now ' + view.to_s

    old_erb new_view,opts
  end

alias_method :old_erb, :erb
alias_method :erb, :my_erb



end