181
|
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 "";
|
185
|
50 }
|
|
51 }
|
|
52
|
|
53 sub AUTOLOAD {
|
|
54 our $AUTOLOAD;
|
|
55
|
|
56 my $method = ($AUTOLOAD =~ m/(\w+)$/)[0];
|
|
57
|
|
58 return if $method eq 'DESTROY';
|
|
59
|
|
60 my $res = $_[0]->template->$method();
|
|
61
|
|
62 return defined($res) ? $res : $_[0]->context->stash->get($method);
|
181
|
63
|
|
64 }
|
|
65
|
|
66 1;
|
|
67
|
|
68 __END__
|
|
69
|
|
70 =pod
|
|
71
|
|
72 =head1 NAME
|
|
73
|
|
74 C<IMPL::Web::View::TTControl>
|
|
75
|
|
76 =head1 SYNPOSIS
|
|
77
|
|
78 =head1 DESCRIPTION
|
|
79
|
|
80 =head2 BLOCKS
|
|
81
|
|
82 При загрузке шаблона, создается фабрика, с собственным контекстом в которой выполняется шаблон элемента управления
|
|
83
|
|
84 =head3 INIT
|
|
85
|
|
86 Данный блок шаблона управления выполняется один раз при создании первого экземпляра элемента управления
|
|
87
|
|
88 =head3 CTOR
|
|
89
|
|
90 данный блок выполняется каждый раз при создании нового экземпляра элемента управления, при этом переменная C<this>
|
|
91 указывает на эземпляр элемента упарвления
|
|
92
|
|
93 =head3 RENDER
|
|
94
|
|
95
|
|
96
|
|
97
|
|
98 C<lang ru>
|
|
99
|
|
100 =cut |