Mercurial > pub > Impl
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 |