我们的代码中有一些呈现如下:
erb :login, :layout => :layout
<%= erb :_maintabs %>
我只是想将这些代码行改为像这样的一行代码 这会做同样的事情:
erb :login, :layout => Main::get_layout
<%= erb Main::my_tabs %>
这将使我能够编写一些插件来扩展我们的代码,但我工作的人似乎对此并不感兴趣,并且不希望我检查代码中的这些类型的更改。所以我的问题是,有没有办法可以修改sinatra渲染以根据布局名称渲染不同的布局或视图?过度骑行必须在较低的水平上进行。
答案 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