我想在每个webapp页面的<body>
标记内插入一段任意的HTML代码(或最好是另一个Markaby模板)。如何在每个<body>标记内插入我的HTML /模板?
我正在使用Markaby,这意味着模板是(或多或少)一个Ruby类,而body
是它的方法。因此,必须编写一些Ruby代码来截获body
方法调用并插入我的HTML。
我如何用Sinatra做到这一点?
我想在每个webapp页面的<body>
标记内插入一段任意的HTML代码(或最好是另一个Markaby模板)。如何在每个<body>标记内插入我的HTML /模板?
我正在使用Markaby,这意味着模板是(或多或少)一个Ruby类,而body
是它的方法。因此,必须编写一些Ruby代码来截获body
方法调用并插入我的HTML。
我如何用Sinatra做到这一点?
什么阻止您在布局中使用<%= yield %>
?例如,下面的代码将在模板layout.erb
和页面是hello.erb
使用<%= yield %>
在这种情况下呈现布局的<body>
标签内当前视图。 hello.erb
被呈现在layout.erb
内,而不是<%= yield %>
声明。这是你的意思吗?从About.com - Sinatra
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
感谢的建议,但我真正需要的是一样的东西我张贴在另一个答案 – 2012-03-24 19:59:43