Mercurial > pub > Impl
diff Lib/IMPL/Web/View/TTControl.pm @ 181:47dac58691ee
New templating system, small fixes
author | sourcer |
---|---|
date | Thu, 26 Jan 2012 01:15:57 +0400 |
parents | |
children | ae8072f2f2a3 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/Web/View/TTControl.pm Thu Jan 26 01:15:57 2012 +0400 @@ -0,0 +1,88 @@ +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 ""; + } + +} + +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 \ No newline at end of file