0

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

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

我如何使用 Sinatra 做到这一点?

4

2 回答 2

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>

来自About.com 的代码 - Sinatra

于 2012-03-24T18:50:47.170 回答
0

这可以通过重新定义bodyMarkabyBuilder类中的方法来完成。这段代码可以做到:

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-24T19:58:37.713 回答