0

我们的代码中有一些渲染,如下所示:

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

我只是想将这些代码行更改为类似这样的单行函数,它们会做同样的事情:

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

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

4

2 回答 2

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
于 2013-06-14T19:16:49.790 回答
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
于 2013-06-17T21:00:18.093 回答