comparison Lib/IMPL/Web/View/TTDocument.pm @ 195:7a920771fd8e

IMPL::Web::View changed document layout handling, docs, examples
author cin
date Wed, 11 Apr 2012 17:50:33 +0400
parents 4d0e1962161c
children 292226770180
comparison
equal deleted inserted replaced
194:4d0e1962161c 195:7a920771fd8e
115 115
116 my $output; 116 my $output;
117 117
118 if ($this->layout) { 118 if ($this->layout) {
119 $output = $this->context->include( 119 $output = $this->context->include(
120 $this->loader->template($this->layout), 120 $this->loader->layout($this->layout),
121 { 121 {
122 content => sub { $output ||= $this->RenderContent($args); }, 122 content => sub { $output ||= $this->RenderContent($args); },
123 this => $this, 123 this => $this,
124 template => $this->template 124 template => $this->template
125 } 125 }
180 Процесс форматирования объектной модели в готовый документ может быть выполнена как вручную, так и при помощи 180 Процесс форматирования объектной модели в готовый документ может быть выполнена как вручную, так и при помощи
181 вспомогательного шаблона - обертки. Если у шаблона документа указан C<layout> в метаданных, то он будет 181 вспомогательного шаблона - обертки. Если у шаблона документа указан C<layout> в метаданных, то он будет
182 использован как шаблон для форматирования объектной модели, вывод самого шаблона будет проигнорирован. Если 182 использован как шаблон для форматирования объектной модели, вывод самого шаблона будет проигнорирован. Если
183 обертка не задана, то результатом будет вывод самого скрипта шаблона. 183 обертка не задана, то результатом будет вывод самого скрипта шаблона.
184 184
185 Использование объектной модели документа позволяет решить задачи по созданию элементов управления 185 Использование объектной модели документа позволяет решить задачи по созданию контейнеров,
186 контейнеров, у которых может быть сложное содежимое. Примером таких элементов могут быть формы, 186 у которых может быть сложное содежимое. Примером таких элементов могут быть формы,
187 внутри форм элементы управления могут группироваться. 187 внутри форм элементы управления также могут группироваться.
188 188
189 =head2 Элементы управления (компоненты) 189 =head2 Элементы управления (компоненты)
190 190
191 Документ состоит из узлов, часть которых наследуется от C<IMPL::Web::View::TTControl>, такие узлы называются 191 Документ состоит из узлов, часть которых наследуется от C<IMPL::Web::View::TTControl>, такие узлы называются
192 элементами управления. Каждый элемент управления имеет собственный контекст, который наследуется от контекста 192 элементами управления. Каждый элемент управления имеет собственный контекст, который наследуется от контекста
196 196
197 Для создания элементов управления используются фабрики. Каждый элемен управления имеет свой шаблон для 197 Для создания элементов управления используются фабрики. Каждый элемен управления имеет свой шаблон для
198 форматиорвания содержимого, фабрика связывает шаблон и класс элемента управления, для чего при загрузке 198 форматиорвания содержимого, фабрика связывает шаблон и класс элемента управления, для чего при загрузке
199 шаблона используется свойство C<type> из метаданных. Фабрика загружается в документ при том только один 199 шаблона используется свойство C<type> из метаданных. Фабрика загружается в документ при том только один
200 раз, повторные загрузки фабрики возвращают уже загруженную. Для загрузки фабрики используется метод 200 раз, повторные загрузки фабрики возвращают уже загруженную. Для загрузки фабрики используется метод
201 C<require()>. 201 C<require()> с указанием элемента управления.
202
203 202
204 =head2 Порядок обработки документа 203 =head2 Порядок обработки документа
205 204
206 =over 205 Построение представления данных состоит из двух этапов
207 206
208 =item 1 Создается документ при помощи метода C<TTLoader::document()> 207 =over
209 208
210 =item 1 При создании документа (в конструкторе), происходит выполнение блока C<CTOR> 209 =item 1 Создание объектной модели документа. На данном этапе создаются все элементы управления.
211 210
212 =item 1 При вызове метода C<TTDocument::Render()> устанавливаются переменные C<this>, C<document> 211 =item 1 Преобразование объектной модели в конечнное представление. На данном этапе происходит
213 и шаблон обрабатывается при помощи метода C<process()> контекста документа. 212 форматирование документа.
214 213
215 =back 214 =back
215
216 216
217 =head2 Загрузка элемента управления 217 =head2 Загрузка элемента управления
218 218
219 =over 219 =over
220 220
221 =item 1 C<TInput = require('my/org/input')> 221 =item 1 C<TInput = require('my/org/input')>
222 222
223 =item 1 Загружает шаблон C<my/org/input.tt> 223 =item 1 Загружается шаблон C<my/org/input.tt>
224 224
225 =item 1 Создает фабрику элементов управления с собственным контекстом, унаследованным от контекст документа. 225 =item 1 Создается фабрика элементов управления с собственным контекстом, унаследованным от контекст документа.
226 226
227 =item 1 Выполняет шаблон в пространстве имен фабрики 227 =item 1 При первом создании элемента управления фабрика инициализируется выполнением блока C<INIT>.
228 228
229 =back 229 =back
230 230
231 =head2 Создание элемента управления 231 =head2 Создание элемента управления
232 232
233 =over 233 =over
234 234
235 =item 1 C<< TInput.new('login') >> 235 =item 1 C<< TInput.new('login') >>
236 236
237 =item 1 Если это первый элемент управления, то выполняетя статический конструктор в контексте фабрики
238
239 =item 1 Создается новый дочерний контекст к контексту фабрики 237 =item 1 Создается новый дочерний контекст к контексту фабрики
240 238
241 =item 1 Создается экземпляр элемента управления 239 =item 1 Создается экземпляр элемента управления
242 240
243 =item 1 Выполняется блок конструктора в контексте элемента управления, параметр C<this> имеет значение 241 =item 1 Выполняется блок конструктора C<CTOR> в контексте элемента управления, параметр C<this> имеет значение
244 нового экземпляра элемента управления 242 нового экземпляра элемента управления
245 243
246 =back 244 =back
247 245
248 =head1 MEMBERS 246 =head1 MEMBERS
249 247
250 =over 248 =over
251 249
252 =item C<CTOR($template, %options)> 250 =item C<CTOR($template, $contextOpts, $loader[, $vars])>
253 251
254 Создает экземпляр документа с указанным шаблоном и параметрами, параметры 252 Создает экземпляр документа с указанным шаблоном и параметрами.
255 253
256 =back 254 =over
255
256 =item C<$template>
257
258 C<Template::Document> шаблон документа.
259
260 =item C<$contextOpts>
261
262 C<HASH> Параметры контекста C<Template::Context> для документа. Эти параметры будут сохранены
263 в свойстве C<opts>, а также на их основе будет создан контекст текщего документа. Как правило
264 эти параметы задаются загрузчиком документа C<IMPL::Web::View::TTLoader>, таким образом, что
265 C<Template::Stash> создаваемого контекста наследует переменные из контекста загрузчика.
266
267 =item C<$loader>
268
269 C<IMPL::Web::View::TTLoader> загрузчик, который будет использоваться для загрузки элементов управления,
270 а также для получения обертки, заданной в свойстве документа C<layout>.
271
272 =item C<$vars>
273
274 C<HASH> Необязательный параметр. переменные которые будут переданы в блок конструктора C<INIT>.
275 Как правило они используются для передачи данных для построения документа
276
277 =back
278
279 =back
280
281 =over
282
283 =item C<templateVars($name[,$newValue])>
284
285 Получает или задает переменную для шаблона документа. Имя переменнной может быть составным,
286 например C<'my.var.name'>, см. C<Template::Stash::set()>.
287
288 =item C<require($controlName)>
289
290 Загружает фабрику элемента управления, если она уже была загружена, возвращает на нее ссылку.
291 При загрузки фабрики для нее создается собственный контекст на основе параметров из свойства
292 C<opts> и ее пространство имен наследуется от пространства имен документа из свойства C<stash>.
293
294 =item C<Render($vars)>
295
296 Выполняет блок C<renderBlock> документа для получения конечного представления, C<$vars>
297 содержит переменные для блока.
298
299 =item C<RenderContent($vars)>
300
301 Выполняет шаблон документа для получения представления содержимого, в отличии от
302 метода C<Render> не использует обертку указанную в свойстве C<layout>, если обертка
303 не указана, то эти методы идентичны.
304
305 =item C<[get,set]layout>
306
307 Обертка, которая будет использована для построения представления документа. В обертке
308 будет доступна специальная переменная C<content>, при обращении к которой будет B<выполнен>
309 метод C<RenderContent()> и возвращен результат его работы. Для получения шаблона обертки
310 используется загрузчик из свойства C<loader>.
311
312 =item C<[get]opts>
313
314 Параметры контекста, используются для создания контекстов фабрик элементов управления.
315
316 =item C<[get]loader>
317
318 Загрузчик, используется для загрузки шаблонов фабрик элементов управления и обертки.
319
320 =item C<[get]controls>
321
322 C<HASH> Коллекция загруженных фабрик элементов управления, ключем является
323 квалифицированное имя элемента управления.
324
325 =item C<[get]stash>
326
327 C<Template::Stash> Пространство имен документа, оно используется как родительское
328 для пространств имен загружаемых фабрик элементов управления.
329
330 =back
331
332 =head1 TEMPLATES
333
334 =begin text
335
336 [%META layout='default'%]
337 [% BLOCK CTOR;
338 section('top','TOP');
339 section('bottom','BOTTOM');
340 section('client','CLIENT');
341 END %]
342 [% BLOCK TOP;
343 TMenu = require('my/org/Menu');
344 append(TMenu.new());
345 END %]
346
347 =end
257 348
258 =cut 349 =cut