Mercurial > pub > Impl
view Lib/IMPL/Web/View/TTView.pm @ 351:cfd7570c2af2
working on TTView: created TTView class for rendering models
author | cin |
---|---|
date | Tue, 08 Oct 2013 17:40:35 +0400 |
parents | |
children | feeb3bc4a818 |
line wrap: on
line source
package IMPL::Web::View::TTView; use strict; use IMPL::Const qw(:prop); use IMPL::declare { require => { Context => 'IMPL::Web::View::TTContext' }, base => [ 'IMPL::Object' => undef, 'IMPL::Object::Autofill' => '@_', 'IMPL::Object::Serializable' => undef ], props => [ options => PROP_RW, view => PROP_RW, layout => PROP_RW, tt_ext => PROP_RW, includes => PROP_RW | PROP_LIST ] }; sub CTOR { my ($this) = @_; $this->tt_ext('tt') unless defined $this->tt_ext; } sub display { my ($this,$model,$template,$args) = @_; my $context = Context->new($this->options); my $layout = delete $args->{layout}; return $context->invoke_environment( sub { my $ctx = shift; if ($layout) { return $ctx->invoke_environment( sub { return $ctx->render($layout,$args); }, { base => $this->layout, content => sub { $ctx->invoke_environment( sub { return shift->display($model,$template,$args); }, { base => $this->view } ) } } ); } else { return $ctx->invoke_environment( sub { return $ctx->display($model,$template,$args); }, { base => $this->view } ); } },{ includes => scalar($this->includes), tt_ext => 'tt', document => {}, debug => sub { warn @_; } } ); } 1;