Mercurial > pub > Impl
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 |