comparison Lib/IMPL/Web/View/TTControl.pm @ 187:927653d01f4f

TTControl::AUTOLOAD now accesses nodeProperties Added TTControl::renderBlock property to access RENDER block of the template
author sergey
date Tue, 03 Apr 2012 07:54:25 +0400
parents 6c0fee769b0c
children 029c9610528c
comparison
equal deleted inserted replaced
186:6c0fee769b0c 187:927653d01f4f
8 8
9 use parent qw( 9 use parent qw(
10 IMPL::DOM::Node 10 IMPL::DOM::Node
11 ); 11 );
12 12
13 my $nextId = 1; 13 {
14 my $nextId = 1;
15 sub _GetNextId {
16 return $nextId++;
17 }
18 }
14 19
15 20
16 BEGIN { 21 BEGIN {
17 public _dom property id => PROP_ALL; 22 public _dom property id => PROP_ALL;
18 23
22 27
23 28
24 sub CTOR { 29 sub CTOR {
25 my ($this,$name,$template,$context,$refProps) = @_; 30 my ($this,$name,$template,$context,$refProps) = @_;
26 31
32 $name ||= "control";
33
27 $this->template( $template ) or die new IMPL::ArgumentException("A template is required"); 34 $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"); 35 $this->context( $context ) or die new IMPL::ArgumentException("A context is required");
29 36
30 if ( my $ctor = $template->blocks->{CTOR} ) { 37 if ( my $ctor = $template->blocks->{CTOR} ) {
31 $context->process($ctor, { this => $this } ); 38 $context->process($ctor, { this => $this } );
32 } 39 }
40
41 $this->id($name . "-" . _GetNextId()) unless $this->id;
33 42
34 } 43 }
35 44
36 our %CTOR = ( 45 our %CTOR = (
37 'IMPL::DOM::Node' => sub { 46 'IMPL::DOM::Node' => sub {
38 nodeName => $_[0], 47 nodeName => $_[0],
39 %{ $_[3] || {} } 48 %{ $_[3] || {} }
40 } 49 }
41 ); 50 );
42 51
52 sub templateVars {
53 my $this = shift;
54 my $name = shift;
55
56 if (@_) {
57 return $this->context->stash->set($name, shift);
58 } else {
59 return $this->context->stash->get($name);
60 }
61 }
62
63 sub renderBlock {
64 $_[0]->template->blocks->{RENDER};
65 }
66
43 sub Render { 67 sub Render {
44 my ($this) = @_; 68 my ($this,$args) = @_;
45 69
46 if(my $body = $this->template->blocks->{RENDER} ) { 70 $args = {} unless ref $args eq 'HASH';
47 return $this->context->process( $body, { this => $this } ); 71
72 if(my $body = $this->renderBlock ) {
73 return $this->context->include( $body, { %$args, this => $this, template => $this->template } );
48 } else { 74 } else {
49 return ""; 75 return "";
50 } 76 }
51 } 77 }
52 78
55 81
56 my $method = ($AUTOLOAD =~ m/(\w+)$/)[0]; 82 my $method = ($AUTOLOAD =~ m/(\w+)$/)[0];
57 83
58 return if $method eq 'DESTROY'; 84 return if $method eq 'DESTROY';
59 85
60 my $res = $_[0]->template->$method(); 86 my $this = shift;
61 87
62 return defined($res) ? $res : $_[0]->context->stash->get($method); 88 $this->nodeProperty(@_);
63
64 } 89 }
65 90
66 1; 91 1;
67 92
68 __END__ 93 __END__
90 данный блок выполняется каждый раз при создании нового экземпляра элемента управления, при этом переменная C<this> 115 данный блок выполняется каждый раз при создании нового экземпляра элемента управления, при этом переменная C<this>
91 указывает на эземпляр элемента упарвления 116 указывает на эземпляр элемента упарвления
92 117
93 =head3 RENDER 118 =head3 RENDER
94 119
95 120 Данный блок выполняется при вызове метода C<Render()>, вывод данного блока и есть результат отображения элемента управления.
121
122 =head2 TEMPLATE VARS
123
124 Каждый шаблон имеет собственное пространство имен, унаследованное от пространства имен фабрики элементов (которая в свою очередь наследует контекст документа).
125 В шаблоне могут определяться новые переменные, которые разделяются между блоками. Также доступны стандартные переменные
126
127 =over
128
129 =item * C<this> ссылка на объект элемента управления
130
131 =item * C<component> ссылка на текущий шаблон, устанавливается автоматически в методе C<Template::Context::process>.
132
133 =item * C<template> ссылка на шаблон элемента управления, для совместимости с C<TT>
134
135 =back
136
137 =head1 MEMBERS
138
139 =over
140
141 =item * C<[get]context>
142
143 Контекст элемента управления, хранит пременные шаблона. Наследуется от контекста фабрики элементов управления, который
144 наследуется от контекста документа.
145
146 =item * C<[get,set]template>
147
148 C<Template::Document> Шаблон элемента управления.
149
150 =item * C<AUTOLOAD>
151
152 Для удобства работы с шаблоном, элементы управления предоставляю доступ к своим свойствам через метод C<AUTOLOAD>.
153
154 =back
96 155
97 156
98 C<lang ru> 157 C<lang ru>
99 158
100 =cut 159 =cut