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 |
