comparison 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
comparison
equal deleted inserted replaced
180:d1676be8afcc 181:47dac58691ee
1 package IMPL::Web::View::TTControl;
2 use strict;
3
4 use IMPL::DOM::Property qw(_dom);
5 use IMPL::lang qw(:declare :constants);
6
7 use Template::Context();
8
9 use parent qw(
10 IMPL::DOM::Node
11 );
12
13 my $nextId = 1;
14
15
16 BEGIN {
17 public _dom property id => PROP_ALL;
18
19 public property context => PROP_GET | PROP_OWNERSET;
20 public property template => PROP_ALL;
21 }
22
23
24 sub CTOR {
25 my ($this,$name,$template,$context,$refProps) = @_;
26
27 $this->template( $template ) or die new IMPL::ArgumentException("A template is required");
28 $this->context( $context ) or die new IMPL::ArgumentException("A context is required");
29
30 if ( my $ctor = $template->blocks->{CTOR} ) {
31 $context->process($ctor, { this => $this } );
32 }
33
34 }
35
36 our %CTOR = (
37 'IMPL::DOM::Node' => sub {
38 nodeName => $_[0],
39 %{ $_[3] || {} }
40 }
41 );
42
43 sub Render {
44 my ($this) = @_;
45
46 if(my $body = $this->template->blocks->{RENDER} ) {
47 return $this->context->process( $body, { this => $this } );
48 } else {
49 return "";
50 }
51
52 }
53
54 1;
55
56 __END__
57
58 =pod
59
60 =head1 NAME
61
62 C<IMPL::Web::View::TTControl>
63
64 =head1 SYNPOSIS
65
66 =head1 DESCRIPTION
67
68 =head2 BLOCKS
69
70 При загрузке шаблона, создается фабрика, с собственным контекстом в которой выполняется шаблон элемента управления
71
72 =head3 INIT
73
74 Данный блок шаблона управления выполняется один раз при создании первого экземпляра элемента управления
75
76 =head3 CTOR
77
78 данный блок выполняется каждый раз при создании нового экземпляра элемента управления, при этом переменная C<this>
79 указывает на эземпляр элемента упарвления
80
81 =head3 RENDER
82
83
84
85
86 C<lang ru>
87
88 =cut