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