comparison Lib/IMPL/Web/View/TTDocument.pm @ 304:2ff513227cb4

*TTView: refactoring. Added control registry for the document.
author cin
date Mon, 15 Apr 2013 07:44:50 +0400
parents a5eb64c6e6f7
children b5d5793f348e
comparison
equal deleted inserted replaced
303:a5eb64c6e6f7 304:2ff513227cb4
160 160
161 =head1 SYNOPSIS 161 =head1 SYNOPSIS
162 162
163 =begin code 163 =begin code
164 164
165 use IMPL::Web::View::TTDocument();
166
167 my $doc = new IMPL::Wbe::View::TTDocument($template,$ttOptions);
168
169 return $doc->Render();
170 165
171 =end code 166 =end code
172 167
173 Однако, более предпочтительный способ использовать C<IMPL::Web::View::TTLoader>.
174
175 =head1 DESCRIPTION 168 =head1 DESCRIPTION
176 169
177 Документ для представления данных. Документы представляют собой иерархически организованные данные,
178 элементами данного документа являются данные для отображения, такие как
179 170
180 =over 171 =over
181 172
182 =item * Объекты из БД
183
184 =item * Навигационные цепочки
185
186 =item * Меню и т.п.
187
188 =back
189
190 Скприт шаблона формирует структуру документа, затем сформированная структура форматируется в готовый документ.
191 Процесс форматирования объектной модели в готовый документ может быть выполнена как вручную, так и при помощи
192 вспомогательного шаблона - обертки. Если у шаблона документа указан C<layout> в метаданных, то он будет
193 использован как шаблон для форматирования объектной модели, вывод самого шаблона будет проигнорирован. Если
194 обертка не задана, то результатом будет вывод самого скрипта шаблона.
195
196 Использование объектной модели документа позволяет решить задачи по созданию контейнеров,
197 у которых может быть сложное содежимое. Примером таких элементов могут быть формы,
198 внутри форм элементы управления также могут группироваться.
199
200 =head2 Элементы управления (компоненты)
201
202 Документ состоит из узлов, часть которых наследуется от C<IMPL::Web::View::TTControl>, такие узлы называются
203 элементами управления. Каждый элемент управления имеет собственный контекст, который наследуется от контекста
204 документа.
205
206 =head2 Фабрика элементов управления
207
208 Для создания элементов управления используются фабрики. Каждый элемен управления имеет свой шаблон для
209 форматиорвания содержимого, фабрика связывает шаблон и класс элемента управления, для чего при загрузке
210 шаблона используется свойство C<type> из метаданных. Фабрика загружается в документ при том только один
211 раз, повторные загрузки фабрики возвращают уже загруженную. Для загрузки фабрики используется метод
212 C<require()> с указанием элемента управления.
213
214 =head2 Порядок обработки документа
215
216 Построение представления данных состоит из двух этапов
217
218 =over
219
220 =item 1 Создание объектной модели документа. На данном этапе создаются все элементы управления.
221
222 =item 1 Преобразование объектной модели в конечнное представление. На данном этапе происходит
223 форматирование документа.
224
225 =back
226
227
228 =head2 Загрузка элемента управления
229
230 =over
231
232 =item 1 C<TInput = require('my/org/input')>
233
234 =item 1 Загружается шаблон C<my/org/input.tt>
235
236 =item 1 Создается фабрика элементов управления с собственным контекстом, унаследованным от контекст документа.
237
238 =item 1 При первом создании элемента управления фабрика инициализируется выполнением блока C<INIT>.
239
240 =back
241
242 =head2 Создание элемента управления
243
244 =over
245
246 =item 1 C<< TInput.new('login') >>
247
248 =item 1 Создается новый дочерний контекст к контексту фабрики
249
250 =item 1 Создается экземпляр элемента управления
251
252 =item 1 Выполняется блок конструктора C<CTOR> в контексте элемента управления, параметр C<this> имеет значение
253 нового экземпляра элемента управления
254
255 =back
256
257 =head1 MEMBERS
258
259 =over
260
261 =item C<CTOR($template, $contextOpts, $loader[, $vars])>
262
263 Создает экземпляр документа с указанным шаблоном и параметрами.
264
265 =over
266
267 =item C<$template>
268
269 C<Template::Document> шаблон документа.
270
271 =item C<$contextOpts>
272
273 C<HASH> Параметры контекста C<Template::Context> для документа. Эти параметры будут сохранены
274 в свойстве C<opts>, а также на их основе будет создан контекст текщего документа. Как правило
275 эти параметы задаются загрузчиком документа C<IMPL::Web::View::TTLoader>, таким образом, что
276 C<Template::Stash> создаваемого контекста наследует переменные из контекста загрузчика.
277
278 =item C<$loader>
279
280 C<IMPL::Web::View::TTLoader> загрузчик, который будет использоваться для загрузки элементов управления,
281 а также для получения обертки, заданной в свойстве документа C<layout>.
282
283 =item C<$vars>
284
285 C<HASH> Необязательный параметр. переменные которые будут переданы в блок конструктора C<INIT>.
286 Как правило они используются для передачи данных для построения документа
287
288 =back
289
290 =back
291
292 =over
293
294 =item C<templateVars($name[,$newValue])>
295
296 Получает или задает переменную для шаблона документа. Имя переменнной может быть составным,
297 например C<'my.var.name'>, см. C<Template::Stash::set()>.
298
299 =item C<RequireControl($controlName)>
300
301 Загружает фабрику элемента управления, если она уже была загружена, возвращает на нее ссылку.
302 При загрузки фабрики для нее создается собственный контекст на основе параметров из свойства
303 C<opts> и ее пространство имен наследуется от пространства имен документа из свойства C<stash>.
304
305 =item C<Render($vars)>
306
307 Выполняет блок C<renderBlock> документа для получения конечного представления, C<$vars>
308 содержит переменные для блока.
309
310 =item C<RenderContent($vars)>
311
312 Выполняет шаблон документа для получения представления содержимого, в отличии от
313 метода C<Render> не использует обертку указанную в свойстве C<layout>, если обертка
314 не указана, то эти методы идентичны.
315
316 =item C<[get,set]layout>
317
318 Обертка, которая будет использована для построения представления документа. В обертке
319 будет доступна специальная переменная C<content>, при обращении к которой будет B<выполнен>
320 метод C<RenderContent()> и возвращен результат его работы. Для получения шаблона обертки
321 используется загрузчик из свойства C<loader>.
322
323 =item C<[get]opts>
324
325 Параметры контекста, используются для создания контекстов фабрик элементов управления.
326
327 =item C<[get]loader>
328
329 Загрузчик, используется для загрузки шаблонов фабрик элементов управления и обертки.
330
331 =item C<[get]controls>
332
333 C<HASH> Коллекция загруженных фабрик элементов управления, ключем является
334 квалифицированное имя элемента управления.
335
336 =item C<[get]stash>
337
338 C<Template::Stash> Пространство имен документа, оно используется как родительское
339 для пространств имен загружаемых фабрик элементов управления.
340
341 =back
342
343 =head1 TEMPLATES
344
345 =begin text
346
347 [%META layout='default'%]
348 [% BLOCK CTOR;
349 section('top','TOP');
350 section('bottom','BOTTOM');
351 section('client','CLIENT');
352 END %]
353 [% BLOCK TOP;
354 TMenu = require('my/org/Menu');
355 append(TMenu.new());
356 END %]
357
358 =end
359 173
360 =cut 174 =cut