我想在每個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