NAME
Squatting::View - default view class for Squatting
SYNOPSIS
package App::Views;
use Squatting 'views';
our @V = (
V(
'html',
layout => sub {
my ($self, $v, @content) = @_;
"(header @content footer)";
},
home => sub {
my ($self, $v) = @_;
"Hello, $v->{name}";
},
_ => sub {
my ($self, $v) = @_;
"You tried to render $self->{template} which was not defined.";
},
arbitrary_data => [ 'is', 'ok', 2 ],
)
);
DESCRIPTION
In Squatting, views are objects that contain many templates. Templates are represented by subroutine references that will be installed as methods of a view object. The job of a template is to take a hashref of variables and return a string.
You may also define a special template named "layout" that's expected to also take the output of another template and wrap it.
API
General Methods
Squatting::View->new($name, %methods)
The constructor takes a name and a hash of attributes and coderefs.
$v->name
This returns the name of the view.
Template Methods
$v->$template($v)
Any coderef that was given to the constructor may be called by name. Templates should be passed in a hashref ($v) with variables for it to use to generate the final output.
$v->layout($v, @content)
If you define a template named "layout", it'll be used to wrap the content of all templates whose name do not begin with "_". You can use this feature to provide standard headers and footers for your pages.
$v->_($v)
If you define a template named "_", this will act as a catch-all that can be asked to render anything that wasn't explicitly defined. It's like our version of AUTOLOAD().
NOTE: You can find out what they tried to render by inspecting $self->{template}.