2012-03-23 51 views
0

我想在每个webapp页面的<body>标记内插入一段任意的HTML代码(或最好是另一个Markaby模板)。如何在每个<body>标记内插入我的HTML /模板?

我正在使用Markaby,这意味着模板是(或多或少)一个Ruby类,而body是它的方法。因此,必须编写一些Ruby代码来截获body方法调用并插入我的HTML。

我如何用Sinatra做到这一点?

回答

0

什么阻止您在布局中使用<%= yield %>?例如,下面的代码将在模板layout.erb和页面是hello.erb使用<%= yield %>

在这种情况下呈现布局的<body>标签内当前视图。 hello.erb被呈现在layout.erb内,而不是<%= yield %>声明。这是你的意思吗?从About.com - Sinatra

+0

感谢的建议,但我真正需要的是一样的东西我张贴在另一个答案 – 2012-03-24 19:59:43

0

require 'sinatra' 

get '/hello/:name' do 
    @name = params[:name] 
    erb :hello 
end 

__END__ 
@@ layout 
<html> 
    <body> 
    <%= yield %> 
    </body> 
</html> 

@@ hello 
<h3>Hello <%= @name %>!</h3> 

代码,可以通过重新定义Markaby的肩头Builder类的body方法来完成。这段代码将做到这一点:

class Markaby::Builder 
    alias body_orig body 
    def body(*args, &block) 
    str = capture(&block) 
    block = proc { text('ON EVERY PAGE' + str) } 
    body_orig(*args, &block) 
    end 
end 

而这其中将包括另一Markaby的肩头模板作为body标签内的第一件事:

class Markaby::Builder 
    alias body_orig body 
    def body(*args, &block) 
    str = capture(&block) 
    str2 = render :mab, :include_template_name, *args 
    block = proc { text(str2 + str) } 
    body_orig(*args, &block) 
    end 
end