annotate Lib/IMPL/Web/View/TTDocument.pm @ 250:129e48bb5afb

DOM refactoring ObjectToDOM methods are virtual QueryToDOM uses inflators Fixed transform for the complex values in the ObjectToDOM QueryToDOM doesn't allow to use complex values (HASHes) as values for nodes (overpost problem)
author sergey
date Wed, 07 Nov 2012 04:17:53 +0400
parents 7c517134c42f
children 0f59b2de72af
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
1 package IMPL::Web::View::TTDocument;
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
2 use strict;
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
3
236
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
4 use Scalar::Util qw(weaken);
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
5 use IMPL::Const qw(:prop);
241
f48a1a9f4fa2 +Added ViewResult to allow implementation of the view environment.
sergey
parents: 238
diff changeset
6 use IMPL::lang qw(:hash);
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
7
236
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
8 use IMPL::declare {
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
9 require => {
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
10 TTFactory => 'IMPL::Web::View::TTFactory',
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
11 TTControl => 'IMPL::Web::View::TTControl',
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
12 Loader => 'IMPL::Code::Loader'
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
13 },
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
14 base => [
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
15 'IMPL::Web::View::TTControl' => sub {
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
16 my ($template,$contextOpts) = @_;
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
17 'document',
238
b8c724f6de36 DOM model refactoring
sergey
parents: 236
diff changeset
18 $template, # template
b8c724f6de36 DOM model refactoring
sergey
parents: 236
diff changeset
19 Template::Context->new($contextOpts) # context
236
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
20 }
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
21 ],
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
22 props => [
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
23 layout => PROP_RW,
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
24 opts => PROP_RO,
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
25 loader => PROP_RW,
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
26 controls => PROP_RO,
241
f48a1a9f4fa2 +Added ViewResult to allow implementation of the view environment.
sergey
parents: 238
diff changeset
27 creationArgs => PROP_RO,
236
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
28
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
29 # store the stash separately to make require() method to work correctly
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
30 # even when a stash of the context is modified during the processing
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
31 stash => PROP_RO
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
32 ]
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
33 };
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
34
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
35 BEGIN {
236
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
36
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
37 }
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
38
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
39 sub CTOR {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
40 my ($this,$template,$refOpts,$loader,$vars) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
41
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
42 $this->controls({});
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
43 $this->loader($loader) if $loader;
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
44
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
45 $this->layout( $template->layout ) unless $this->layout;
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
46
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
47 $this->opts($refOpts);
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
48 $this->stash($this->context->stash);
241
f48a1a9f4fa2 +Added ViewResult to allow implementation of the view environment.
sergey
parents: 238
diff changeset
49 $this->creationArgs($vars);
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
50
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
51 my $self = $this;
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
52 weaken($self);
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
53
241
f48a1a9f4fa2 +Added ViewResult to allow implementation of the view environment.
sergey
parents: 238
diff changeset
54 $this->templateVars(require => sub {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
55 my $doc = $self;
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
56 die new IMPL::Exception("A document is destroyed or invalid") unless $doc;
236
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
57 $doc->RequireControl(@_);
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
58 });
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
59
241
f48a1a9f4fa2 +Added ViewResult to allow implementation of the view environment.
sergey
parents: 238
diff changeset
60 $this->templateVars(context => $vars);
f48a1a9f4fa2 +Added ViewResult to allow implementation of the view environment.
sergey
parents: 238
diff changeset
61
f48a1a9f4fa2 +Added ViewResult to allow implementation of the view environment.
sergey
parents: 238
diff changeset
62 $this->templateVars(document => sub { $self } );
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
63 $this->InitInstance($vars);
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
64 }
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
65
189
08015e2803f1 IMPL::Vew::Web - fixed memory leaks, more tests
cin
parents: 188
diff changeset
66 sub templateVars {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
67 my $this = shift;
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
68 my $name = shift;
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
69
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
70 if (@_) {
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
71 return $this->stash->set($name, shift);
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
72 } else {
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
73 return $this->stash->get($name);
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
74 }
189
08015e2803f1 IMPL::Vew::Web - fixed memory leaks, more tests
cin
parents: 188
diff changeset
75 }
08015e2803f1 IMPL::Vew::Web - fixed memory leaks, more tests
cin
parents: 188
diff changeset
76
236
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
77 sub RequireControl {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
78 my ($this, $control, $nodeProps) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
79
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
80 $nodeProps ||= {};
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
81 $nodeProps->{document} = $this;
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
82
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
83 if (my $factory = $this->controls->{$control}) {
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
84 return $factory;
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
85 } else {
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
86
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
87 my $path = $control;
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
88 if ( my $template = $this->loader->template($path) ) {
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
89 my $opts = { %{$this->opts} };
189
08015e2803f1 IMPL::Vew::Web - fixed memory leaks, more tests
cin
parents: 188
diff changeset
90
245
7c517134c42f Added Unsupported media type Web exception
sergey
parents: 241
diff changeset
91 # factory will create a clone of the stash
7c517134c42f Added Unsupported media type Web exception
sergey
parents: 241
diff changeset
92 # $opts->{STASH} = $this->stash->clone();
188
029c9610528c Memory leak tests in IMPL::Web::View
cin
parents: 187
diff changeset
93
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
94 my $ctx = new Template::Context($opts);
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
95
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
96 $factory = new IMPL::Web::View::TTFactory(
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
97 $template->class || typeof IMPL::Web::View::TTControl,
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
98 $template,
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
99 $ctx,
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
100 $opts
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
101 );
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
102
236
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
103 if ($template->class) {
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
104 Loader->safe->Require($template->class);
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
105 }
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
106
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
107 my @parts = split(/\/+/,$control);
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
108
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
109 $this->controls->{$control} = $factory;
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
110
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
111 return $factory;
188
029c9610528c Memory leak tests in IMPL::Web::View
cin
parents: 187
diff changeset
112
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
113 } else {
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
114 die new IMPL::KeyNotFoundException($control);
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
115 }
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
116 }
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
117 }
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
118
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
119 sub Render {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
120 my ($this,$args) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
121
241
f48a1a9f4fa2 +Added ViewResult to allow implementation of the view environment.
sergey
parents: 238
diff changeset
122 $args ||= {};
f48a1a9f4fa2 +Added ViewResult to allow implementation of the view environment.
sergey
parents: 238
diff changeset
123
f48a1a9f4fa2 +Added ViewResult to allow implementation of the view environment.
sergey
parents: 238
diff changeset
124 my $newArgs = hashMerge($this->creationArgs, $args);
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
125
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
126 if ($this->layout) {
241
f48a1a9f4fa2 +Added ViewResult to allow implementation of the view environment.
sergey
parents: 238
diff changeset
127 return $this->context->include(
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
128 $this->loader->layout($this->layout),
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
129 {
241
f48a1a9f4fa2 +Added ViewResult to allow implementation of the view environment.
sergey
parents: 238
diff changeset
130 %{$newArgs},
245
7c517134c42f Added Unsupported media type Web exception
sergey
parents: 241
diff changeset
131 content => $this->RenderContent($newArgs),
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
132 this => $this,
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
133 template => $this->template
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
134 }
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
135 );
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
136 } else {
241
f48a1a9f4fa2 +Added ViewResult to allow implementation of the view environment.
sergey
parents: 238
diff changeset
137 return $this->RenderContent($newArgs);
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
138 }
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
139 }
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
140
190
cd1ff7029a63 IMLP::Web::View refactored, added new method 'require' which is available inside templates. Changed document rendering.
cin
parents: 189
diff changeset
141 sub RenderContent {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
142 my $this = shift;
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
143 return $this->SUPER::Render(@_);
190
cd1ff7029a63 IMLP::Web::View refactored, added new method 'require' which is available inside templates. Changed document rendering.
cin
parents: 189
diff changeset
144 }
cd1ff7029a63 IMLP::Web::View refactored, added new method 'require' which is available inside templates. Changed document rendering.
cin
parents: 189
diff changeset
145
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
146 1;
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
147
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
148 __END__
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
149
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
150 =pod
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
151
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
152 =head1 NAME
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
153
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
154 C<IMPL::Web::View::TTDocument> - документ для построения HTML страницы на основе шаблонов TT.
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
155
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
156 =head1 SYNOPSIS
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
157
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
158 =begin code
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
159
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
160 use IMPL::Web::View::TTDocument();
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
161
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
162 my $doc = new IMPL::Wbe::View::TTDocument($template,$ttOptions);
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
163
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
164 return $doc->Render();
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
165
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
166 =end code
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
167
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
168 Однако, более предпочтительный способ использовать C<IMPL::Web::View::TTLoader>.
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
169
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
170 =head1 DESCRIPTION
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
171
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
172 Документ для представления данных. Документы представляют собой иерархически организованные данные,
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
173 элементами данного документа являются данные для отображения, такие как
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
174
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
175 =over
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
176
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
177 =item * Объекты из БД
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
178
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
179 =item * Навигационные цепочки
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
180
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
181 =item * Меню и т.п.
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
182
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
183 =back
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
184
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
185 Скприт шаблона формирует структуру документа, затем сформированная структура форматируется в готовый документ.
192
a9faf883cdce IMPL::Web::View refactoring
cin
parents: 191
diff changeset
186 Процесс форматирования объектной модели в готовый документ может быть выполнена как вручную, так и при помощи
189
08015e2803f1 IMPL::Vew::Web - fixed memory leaks, more tests
cin
parents: 188
diff changeset
187 вспомогательного шаблона - обертки. Если у шаблона документа указан C<layout> в метаданных, то он будет
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
188 использован как шаблон для форматирования объектной модели, вывод самого шаблона будет проигнорирован. Если
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
189 обертка не задана, то результатом будет вывод самого скрипта шаблона.
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
190
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
191 Использование объектной модели документа позволяет решить задачи по созданию контейнеров,
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
192 у которых может быть сложное содежимое. Примером таких элементов могут быть формы,
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
193 внутри форм элементы управления также могут группироваться.
192
a9faf883cdce IMPL::Web::View refactoring
cin
parents: 191
diff changeset
194
193
sergey
parents: 192
diff changeset
195 =head2 Элементы управления (компоненты)
sergey
parents: 192
diff changeset
196
sergey
parents: 192
diff changeset
197 Документ состоит из узлов, часть которых наследуется от C<IMPL::Web::View::TTControl>, такие узлы называются
sergey
parents: 192
diff changeset
198 элементами управления. Каждый элемент управления имеет собственный контекст, который наследуется от контекста
sergey
parents: 192
diff changeset
199 документа.
sergey
parents: 192
diff changeset
200
sergey
parents: 192
diff changeset
201 =head2 Фабрика элементов управления
sergey
parents: 192
diff changeset
202
sergey
parents: 192
diff changeset
203 Для создания элементов управления используются фабрики. Каждый элемен управления имеет свой шаблон для
sergey
parents: 192
diff changeset
204 форматиорвания содержимого, фабрика связывает шаблон и класс элемента управления, для чего при загрузке
sergey
parents: 192
diff changeset
205 шаблона используется свойство C<type> из метаданных. Фабрика загружается в документ при том только один
sergey
parents: 192
diff changeset
206 раз, повторные загрузки фабрики возвращают уже загруженную. Для загрузки фабрики используется метод
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
207 C<require()> с указанием элемента управления.
190
cd1ff7029a63 IMLP::Web::View refactored, added new method 'require' which is available inside templates. Changed document rendering.
cin
parents: 189
diff changeset
208
185
ae8072f2f2a3 IMPL::Web::View::TTDocument tests, fixes
cin
parents: 181
diff changeset
209 =head2 Порядок обработки документа
ae8072f2f2a3 IMPL::Web::View::TTDocument tests, fixes
cin
parents: 181
diff changeset
210
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
211 Построение представления данных состоит из двух этапов
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
212
185
ae8072f2f2a3 IMPL::Web::View::TTDocument tests, fixes
cin
parents: 181
diff changeset
213 =over
ae8072f2f2a3 IMPL::Web::View::TTDocument tests, fixes
cin
parents: 181
diff changeset
214
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
215 =item 1 Создание объектной модели документа. На данном этапе создаются все элементы управления.
185
ae8072f2f2a3 IMPL::Web::View::TTDocument tests, fixes
cin
parents: 181
diff changeset
216
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
217 =item 1 Преобразование объектной модели в конечнное представление. На данном этапе происходит
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
218 форматирование документа.
185
ae8072f2f2a3 IMPL::Web::View::TTDocument tests, fixes
cin
parents: 181
diff changeset
219
ae8072f2f2a3 IMPL::Web::View::TTDocument tests, fixes
cin
parents: 181
diff changeset
220 =back
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
221
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
222
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
223 =head2 Загрузка элемента управления
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
224
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
225 =over
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
226
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
227 =item 1 C<TInput = require('my/org/input')>
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
228
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
229 =item 1 Загружается шаблон C<my/org/input.tt>
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
230
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
231 =item 1 Создается фабрика элементов управления с собственным контекстом, унаследованным от контекст документа.
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
232
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
233 =item 1 При первом создании элемента управления фабрика инициализируется выполнением блока C<INIT>.
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
234
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
235 =back
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
236
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
237 =head2 Создание элемента управления
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
238
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
239 =over
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
240
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 193
diff changeset
241 =item 1 C<< TInput.new('login') >>
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
242
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
243 =item 1 Создается новый дочерний контекст к контексту фабрики
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
244
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
245 =item 1 Создается экземпляр элемента управления
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
246
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
247 =item 1 Выполняется блок конструктора C<CTOR> в контексте элемента управления, параметр C<this> имеет значение
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
248 нового экземпляра элемента управления
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
249
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
250 =back
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
251
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
252 =head1 MEMBERS
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
253
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
254 =over
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
255
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
256 =item C<CTOR($template, $contextOpts, $loader[, $vars])>
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
257
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
258 Создает экземпляр документа с указанным шаблоном и параметрами.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
259
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
260 =over
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
261
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
262 =item C<$template>
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
263
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
264 C<Template::Document> шаблон документа.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
265
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
266 =item C<$contextOpts>
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
267
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
268 C<HASH> Параметры контекста C<Template::Context> для документа. Эти параметры будут сохранены
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
269 в свойстве C<opts>, а также на их основе будет создан контекст текщего документа. Как правило
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
270 эти параметы задаются загрузчиком документа C<IMPL::Web::View::TTLoader>, таким образом, что
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
271 C<Template::Stash> создаваемого контекста наследует переменные из контекста загрузчика.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
272
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
273 =item C<$loader>
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
274
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
275 C<IMPL::Web::View::TTLoader> загрузчик, который будет использоваться для загрузки элементов управления,
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
276 а также для получения обертки, заданной в свойстве документа C<layout>.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
277
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
278 =item C<$vars>
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
279
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
280 C<HASH> Необязательный параметр. переменные которые будут переданы в блок конструктора C<INIT>.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
281 Как правило они используются для передачи данных для построения документа
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
282
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
283 =back
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
284
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
285 =back
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
286
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
287 =over
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
288
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
289 =item C<templateVars($name[,$newValue])>
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
290
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
291 Получает или задает переменную для шаблона документа. Имя переменнной может быть составным,
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
292 например C<'my.var.name'>, см. C<Template::Stash::set()>.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
293
236
2904da230022 DOM refactoring
sergey
parents: 234
diff changeset
294 =item C<RequireControl($controlName)>
195
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
295
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
296 Загружает фабрику элемента управления, если она уже была загружена, возвращает на нее ссылку.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
297 При загрузки фабрики для нее создается собственный контекст на основе параметров из свойства
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
298 C<opts> и ее пространство имен наследуется от пространства имен документа из свойства C<stash>.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
299
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
300 =item C<Render($vars)>
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
301
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
302 Выполняет блок C<renderBlock> документа для получения конечного представления, C<$vars>
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
303 содержит переменные для блока.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
304
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
305 =item C<RenderContent($vars)>
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
306
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
307 Выполняет шаблон документа для получения представления содержимого, в отличии от
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
308 метода C<Render> не использует обертку указанную в свойстве C<layout>, если обертка
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
309 не указана, то эти методы идентичны.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
310
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
311 =item C<[get,set]layout>
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
312
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
313 Обертка, которая будет использована для построения представления документа. В обертке
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
314 будет доступна специальная переменная C<content>, при обращении к которой будет B<выполнен>
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
315 метод C<RenderContent()> и возвращен результат его работы. Для получения шаблона обертки
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
316 используется загрузчик из свойства C<loader>.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
317
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
318 =item C<[get]opts>
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
319
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
320 Параметры контекста, используются для создания контекстов фабрик элементов управления.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
321
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
322 =item C<[get]loader>
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
323
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
324 Загрузчик, используется для загрузки шаблонов фабрик элементов управления и обертки.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
325
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
326 =item C<[get]controls>
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
327
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
328 C<HASH> Коллекция загруженных фабрик элементов управления, ключем является
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
329 квалифицированное имя элемента управления.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
330
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
331 =item C<[get]stash>
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
332
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
333 C<Template::Stash> Пространство имен документа, оно используется как родительское
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
334 для пространств имен загружаемых фабрик элементов управления.
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
335
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
336 =back
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
337
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
338 =head1 TEMPLATES
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
339
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
340 =begin text
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
341
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
342 [%META layout='default'%]
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
343 [% BLOCK CTOR;
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
344 section('top','TOP');
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
345 section('bottom','BOTTOM');
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
346 section('client','CLIENT');
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
347 END %]
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
348 [% BLOCK TOP;
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
349 TMenu = require('my/org/Menu');
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
350 append(TMenu.new());
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
351 END %]
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
352
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
353 =end
7a920771fd8e IMPL::Web::View changed document layout handling, docs, examples
cin
parents: 194
diff changeset
354
181
47dac58691ee New templating system, small fixes
sourcer
parents:
diff changeset
355 =cut