50 lines
1.6 KiB
Text
50 lines
1.6 KiB
Text
|
= ContentFor
|
||
|
|
||
|
Small extension for the Sinatra[http://sinatrarb.com] web framework
|
||
|
that allows you to use the following helpers in your views:
|
||
|
|
||
|
<% content_for :some_key do %>
|
||
|
<chunk of="html">...</chunk>
|
||
|
<% end %>
|
||
|
|
||
|
<% yield_content :some_key %>
|
||
|
|
||
|
This allows you to capture blocks inside views to be rendered later
|
||
|
in this request. For example, to populate different parts of your
|
||
|
layout from your view.
|
||
|
|
||
|
When using this with the Haml rendering engine, you should do the
|
||
|
following:
|
||
|
|
||
|
- content_for :some_key do
|
||
|
%chunk{ :of => "html" } ...
|
||
|
|
||
|
= yield_content :some_key
|
||
|
|
||
|
<b>Note</b> that with ERB <tt>yield_content</tt> is called <b>without</b>
|
||
|
an '=' block (<tt><%= %></tt>), but with Haml it uses <tt>= yield_content</tt>.
|
||
|
|
||
|
Using an '=' block in ERB will output the content twice for each block,
|
||
|
so if you have problems with that, make sure to check for this.
|
||
|
|
||
|
== Usage
|
||
|
|
||
|
If you're writing "classic" style apps, then requring
|
||
|
<tt>sinatra/content_for</tt> should be enough. If you're writing
|
||
|
"classy" apps, then you also need to call
|
||
|
<tt>helpers Sinatra::ContentFor</tt> in your app definition.
|
||
|
|
||
|
== And how is this useful?
|
||
|
|
||
|
For example, some of your views might need a few javascript tags and
|
||
|
stylesheets, but you don't want to force this files in all your pages.
|
||
|
Then you can put <tt><% yield_content :scripts_and_styles %></tt> on
|
||
|
your layout, inside the <head> tag, and each view can call
|
||
|
<tt>content_for</tt> setting the appropriate set of tags that should
|
||
|
be added to the layout.
|
||
|
|
||
|
== Credits
|
||
|
|
||
|
Code by foca[http://github.com/foca], inspired on the Ruby on Rails
|
||
|
helpers with the same name. Haml support by mattly[http://github.com/mattly].
|