diff Lib/IMPL/Web/View/TTDocument.pm @ 189:08015e2803f1

IMPL::Vew::Web - fixed memory leaks, more tests
author cin
date Wed, 04 Apr 2012 02:49:45 +0400
parents 029c9610528c
children cd1ff7029a63
line wrap: on
line diff
--- a/Lib/IMPL/Web/View/TTDocument.pm	Tue Apr 03 20:08:42 2012 +0400
+++ b/Lib/IMPL/Web/View/TTDocument.pm	Wed Apr 04 02:49:45 2012 +0400
@@ -17,6 +17,10 @@
 	public property opts => PROP_GET | PROP_OWNERSET;
 	public property loader => PROP_GET | PROP_OWNERSET;
 	public property controls => PROP_GET | PROP_OWNERSET;
+	
+	# store the stash separately to make require() method to work correctly
+	# even when a stash of the context is modified during the processing 
+	public property stash => PROP_GET | PROP_OWNERSET; 
 }
 
 sub CTOR {
@@ -28,6 +32,7 @@
 	$this->layout( $template->layout ) unless $this->layout;
 	
 	$this->opts($refOpts);
+	$this->stash($this->context->stash);
 }
 
 our %CTOR = (
@@ -41,38 +46,48 @@
 	}
 );
 
+sub templateVars {
+	my $this = shift;
+	my $name = shift;
+	
+	if (@_) {
+		return $this->stash->set($name, shift);		
+	} else {
+		return $this->stash->get($name);
+	}
+}
+
 sub require {
 	my ($this, $control) = @_;
 	
 	if (my $factory = $this->controls->{$control}) {
 		return $factory;
 	} else {
-=pod		
+	
 		my $path = $control;
 		if ( my $template = $this->loader->template($path) ) {
-			#my $opts = { %{$this->opts} };
-			#$opts->{STASH} = $this->context->stash->clone();
+
+			my $opts = { %{$this->opts} };
+			$opts->{STASH} = $this->stash->clone();
  
-			my $ctx = new Template::Context();#$opts);
+			my $ctx = new Template::Context($opts);
 			
 			$factory = new IMPL::Web::View::TTFactory(
 				typeof IMPL::Web::View::TTControl,
 				$template,
 				$ctx,
-				{} #$opts
+				$opts
 			);
 			
 			my @parts = split(/\/+/,$control);
 			
 			$this->controls->{$control} = $factory;
-			$this->context->stash->set([map { $_, 0 } @parts], $factory);
 						
 			return $factory;
 
 		} else {
 			die new IMPL::KeyNotFoundException($control);
 		}
-=cut		
 	}
 }
 
@@ -134,7 +149,7 @@
 
 Скприт шаблона формирует структуру документа, затем сформированная структура форматируется в готовый документ.
 Процесс преобразования объектной модели в готовый документ может быть выполнена как вручную, так и при помощи
-вспомогательного шаблона - обертки. Если у шаблона документа указан C<wrapper> в метаданных, то он будет
+вспомогательного шаблона - обертки. Если у шаблона документа указан C<layout> в метаданных, то он будет
 использован как шаблон для форматирования объектной модели, вывод самого шаблона будет проигнорирован. Если
 обертка не задана, то результатом будет вывод самого скрипта шаблона.
 
@@ -161,11 +176,9 @@
 
 =item 1 Загружает шаблон C<my/org/input.tt>
 
-=item 1 Создает фабрику элементов управления с собственным контекстом, вложенным в контекст документа.
+=item 1 Создает фабрику элементов управления с собственным контекстом, унаследованным от контекст документа.
 
-=item 1 Выполняет шаблон в пространстве имен фабрики 
-
-=item 1 Регистритует фабрику в контексте документа по пути C<my.org.input>
+=item 1 Выполняет шаблон в пространстве имен фабрики
 
 =back