Mercurial > pub > Impl
comparison Lib/IMPL/Web/View/TTDocument.pm @ 190:cd1ff7029a63
IMLP::Web::View refactored, added new method 'require' which is available inside templates. Changed document rendering.
author | cin |
---|---|
date | Wed, 04 Apr 2012 17:51:27 +0400 |
parents | 08015e2803f1 |
children | 78a18a2b6266 |
comparison
equal
deleted
inserted
replaced
189:08015e2803f1 | 190:cd1ff7029a63 |
---|---|
3 | 3 |
4 use IMPL::lang qw(:declare :constants); | 4 use IMPL::lang qw(:declare :constants); |
5 use IMPL::DOM::Property qw(_dom); | 5 use IMPL::DOM::Property qw(_dom); |
6 use IMPL::Web::View::TTFactory(); | 6 use IMPL::Web::View::TTFactory(); |
7 use IMPL::Web::View::TTControl(); | 7 use IMPL::Web::View::TTControl(); |
8 | |
9 use Scalar::Util qw(weaken); | |
8 | 10 |
9 | 11 |
10 use parent qw( | 12 use parent qw( |
11 IMPL::DOM::Document | 13 IMPL::DOM::Document |
12 IMPL::Web::View::TTControl | 14 IMPL::Web::View::TTControl |
31 | 33 |
32 $this->layout( $template->layout ) unless $this->layout; | 34 $this->layout( $template->layout ) unless $this->layout; |
33 | 35 |
34 $this->opts($refOpts); | 36 $this->opts($refOpts); |
35 $this->stash($this->context->stash); | 37 $this->stash($this->context->stash); |
38 | |
39 my $self = $this; | |
40 weaken($self); | |
41 | |
42 $this->templateVars('require', sub { | |
43 my $doc = $self; | |
44 die new IMPL::Exception("A document is destroyed or invalid") unless $doc; | |
45 $doc->require(@_); | |
46 }); | |
47 | |
48 $this->templateVars('document', sub { $self } ); | |
36 } | 49 } |
37 | 50 |
38 our %CTOR = ( | 51 our %CTOR = ( |
39 'IMPL::Web::View::TTControl' => sub { | 52 'IMPL::Web::View::TTControl' => sub { |
40 'document', | 53 'document', |
96 } | 109 } |
97 | 110 |
98 sub Render { | 111 sub Render { |
99 my ($this,$args) = @_; | 112 my ($this,$args) = @_; |
100 | 113 |
101 my $output = $this->SUPER::Render( { document => $this } ); | 114 my $output; |
102 | 115 |
103 if ($this->layout) { | 116 if ($this->layout) { |
104 $output = $this->context->include($this->layout, { content => $output } ); | 117 $output = $this->context->include( |
118 $this->layout, | |
119 { | |
120 content => sub { $output ||= $this->RenderContent($args); } | |
121 } | |
122 ); | |
123 } else { | |
124 return $this->RenderContent($args); | |
105 } | 125 } |
106 | 126 |
107 return $output; | 127 return $output; |
128 } | |
129 | |
130 sub RenderContent { | |
131 my $this = shift; | |
132 return $this->SUPER::Render(@_); | |
108 } | 133 } |
109 | 134 |
110 | 135 |
111 1; | 136 1; |
112 | 137 |
151 Процесс преобразования объектной модели в готовый документ может быть выполнена как вручную, так и при помощи | 176 Процесс преобразования объектной модели в готовый документ может быть выполнена как вручную, так и при помощи |
152 вспомогательного шаблона - обертки. Если у шаблона документа указан C<layout> в метаданных, то он будет | 177 вспомогательного шаблона - обертки. Если у шаблона документа указан C<layout> в метаданных, то он будет |
153 использован как шаблон для форматирования объектной модели, вывод самого шаблона будет проигнорирован. Если | 178 использован как шаблон для форматирования объектной модели, вывод самого шаблона будет проигнорирован. Если |
154 обертка не задана, то результатом будет вывод самого скрипта шаблона. | 179 обертка не задана, то результатом будет вывод самого скрипта шаблона. |
155 | 180 |
156 Каждый документ имеет свое собственное пространство имен, которое может быть вложенным в некоторое внешнее, | 181 |
157 указанное при создании документа. | |
158 =head2 Порядок обработки документа | 182 =head2 Порядок обработки документа |
159 | 183 |
160 =over | 184 =over |
161 | 185 |
162 =item 1 Создается документ при помощи метода C<TTLoader::document()> | 186 =item 1 Создается документ при помощи метода C<TTLoader::document()> |
170 | 194 |
171 =head2 Загрузка элемента управления | 195 =head2 Загрузка элемента управления |
172 | 196 |
173 =over | 197 =over |
174 | 198 |
175 =item 1 C<document.require('my/org/input')> | 199 =item 1 C<require('my/org/input')> |
176 | 200 |
177 =item 1 Загружает шаблон C<my/org/input.tt> | 201 =item 1 Загружает шаблон C<my/org/input.tt> |
178 | 202 |
179 =item 1 Создает фабрику элементов управления с собственным контекстом, унаследованным от контекст документа. | 203 =item 1 Создает фабрику элементов управления с собственным контекстом, унаследованным от контекст документа. |
180 | 204 |