0

<body>各 Web アプリケーション ページのタグ内に、任意の HTML コード (またはできれば別の Markaby テンプレート) を挿入したいと考えています。

テンプレートが(多かれ少なかれ)Rubyクラスでbodyあり、そのメソッドであることを意味するMarkabyを使用しています。そのため、Ruby コードを記述してbodyメソッド呼び出しをインターセプトし、HTML を挿入できるようにする必要があります。

シナトラでそれを行うにはどうすればよいですか?

4

2 に答える 2

0

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

bodyそして、これには、タグ内の最初のものとして別の Markaby テンプレートが含まれます。

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 に答える
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 に答える