Mercurial > pub > Impl
view Lib/IMPL/Web/View/TTControl.pm @ 185:ae8072f2f2a3
IMPL::Web::View::TTDocument tests, fixes
author | cin |
---|---|
date | Thu, 29 Mar 2012 18:22:15 +0400 |
parents | 47dac58691ee |
children | 6c0fee769b0c |
line wrap: on
line source
package IMPL::Web::View::TTControl; use strict; use IMPL::DOM::Property qw(_dom); use IMPL::lang qw(:declare :constants); use Template::Context(); use parent qw( IMPL::DOM::Node ); my $nextId = 1; BEGIN { public _dom property id => PROP_ALL; public property context => PROP_GET | PROP_OWNERSET; public property template => PROP_ALL; } sub CTOR { my ($this,$name,$template,$context,$refProps) = @_; $this->template( $template ) or die new IMPL::ArgumentException("A template is required"); $this->context( $context ) or die new IMPL::ArgumentException("A context is required"); if ( my $ctor = $template->blocks->{CTOR} ) { $context->process($ctor, { this => $this } ); } } our %CTOR = ( 'IMPL::DOM::Node' => sub { nodeName => $_[0], %{ $_[3] || {} } } ); sub Render { my ($this) = @_; if(my $body = $this->template->blocks->{RENDER} ) { return $this->context->process( $body, { this => $this } ); } else { return ""; } } sub AUTOLOAD { our $AUTOLOAD; my $method = ($AUTOLOAD =~ m/(\w+)$/)[0]; return if $method eq 'DESTROY'; my $res = $_[0]->template->$method(); return defined($res) ? $res : $_[0]->context->stash->get($method); } 1; __END__ =pod =head1 NAME C<IMPL::Web::View::TTControl> =head1 SYNPOSIS =head1 DESCRIPTION =head2 BLOCKS При загрузке шаблона, создается фабрика, с собственным контекстом в которой выполняется шаблон элемента управления =head3 INIT Данный блок шаблона управления выполняется один раз при создании первого экземпляра элемента управления =head3 CTOR данный блок выполняется каждый раз при создании нового экземпляра элемента управления, при этом переменная C<this> указывает на эземпляр элемента упарвления =head3 RENDER C<lang ru> =cut