我想在每个webapp页面的<body>
标记内插入一段任意HTML代码(或者最好是另一个Markaby模板)。
我正在使用Markaby,这意味着模板(或多或少)是一个Ruby类,body
是它的方法。所以必须编写一些Ruby代码来拦截body
方法调用并插入我的HTML。
我如何使用Sinatra做到这一点?
答案 0 :(得分:0)
什么阻止您在布局中使用<%= yield %>
?例如,下面的代码将使用<body>
<%= yield %>
标记内呈现您当前的视图
在这种情况下,模板为layout.erb
,页面为hello.erb
。 hello.erb
在layout.erb
内呈现<%= yield %>
代替require 'sinatra'
get '/hello/:name' do
@name = params[:name]
erb :hello
end
__END__
@@ layout
<html>
<body>
<%= yield %>
</body>
</html>
@@ hello
<h3>Hello <%= @name %>!</h3>
语句。这是你的意思吗?
{{1}}
来自About.com - Sinatra的代码
答案 1 :(得分:0)
可以通过重新定义Markaby body
类中的Builder
方法来完成。这段代码将会这样做:
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