我想<body>
在我的每个 webapp 页面的标签内插入一段任意 HTML 代码(或者最好是另一个 Markaby 模板)。
我正在使用 Markaby,这意味着模板(或多或少)是一个 Ruby 类并且body
是它的方法。因此,必须可以编写一些 Ruby 代码来拦截body
方法调用并插入我的 HTML。
我如何使用 Sinatra 做到这一点?
是什么阻止您 <%= 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>
这可以通过重新定义body
MarkabyBuilder
类中的方法来完成。这段代码可以做到:
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