我想在我的每个webapp页面的<body>标签中插入一段任意的超文本标记语言代码(或者最好是另一个Markaby模板)。
我使用Markaby,这意味着模板(或多或少)是一个Ruby类,body是它的方法。因此,必须能够编写一些Ruby代码来拦截body方法调用并插入我的超文本标记语言。
我如何使用Sinatra做到这一点?
发布于 2012-03-25 02:50:47
是什么阻止你在你的布局中使用<%= yield %>?例如,下面的代码将使用<%= yield %>在布局的<body>标记内呈现当前视图
这就是你的意思吗?
require 'sinatra'
get '/hello/:name' do
@name = params[:name]
erb :hello
end
__END__
@@ layout
<html>
<body>
<%= yield %>
</body>
</html>
@@ hello
<h3>Hello <%= @name %>!</h3>来自About.com - Sinatra的代码
发布于 2012-03-25 03:58:38
这可以通过在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
endhttps://stackoverflow.com/questions/9846087
复制相似问题