changeset 192:a9faf883cdce

IMPL::Web::View refactoring
author cin
date Fri, 06 Apr 2012 16:22:38 +0400
parents 78a18a2b6266
children 8e8401c0aea4
files Lib/IMPL/Web/View/TTControl.pm Lib/IMPL/Web/View/TTDocument.pm Lib/IMPL/Web/View/TTFactory.pm
diffstat 3 files changed, 21 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/Lib/IMPL/Web/View/TTControl.pm	Thu Apr 05 17:51:51 2012 +0400
+++ b/Lib/IMPL/Web/View/TTControl.pm	Fri Apr 06 16:22:38 2012 +0400
@@ -40,7 +40,7 @@
 	weaken($this); # prevent cyclic references produces by the code below
 	
 	$context->stash->set('append', sub { $this->appendChild(@_); undef; } );
-	$context->stash->set('select', sub { $this->selectNodes(@_) } );
+	$context->stash->set('select', sub { $this->selectNodes(@_); } );
 	
 }
 
--- a/Lib/IMPL/Web/View/TTDocument.pm	Thu Apr 05 17:51:51 2012 +0400
+++ b/Lib/IMPL/Web/View/TTDocument.pm	Fri Apr 06 16:22:38 2012 +0400
@@ -72,7 +72,10 @@
 }
 
 sub require {
-	my ($this, $control) = @_;
+	my ($this, $control, $nodeProps) = @_;
+	
+	$nodeProps ||= {};
+	$nodeProps->{document} = $this;
 	
 	if (my $factory = $this->controls->{$control}) {
 		return $factory;
@@ -90,7 +93,8 @@
 				typeof IMPL::Web::View::TTControl,
 				$template,
 				$ctx,
-				$opts
+				$opts,
+				{ document => $this }
 			);
 			
 			my @parts = split(/\/+/,$control);
@@ -174,11 +178,15 @@
 =back
 
 Скприт шаблона формирует структуру документа, затем сформированная структура форматируется в готовый документ.
-Процесс преобразования объектной модели в готовый документ может быть выполнена как вручную, так и при помощи
+Процесс форматирования объектной модели в готовый документ может быть выполнена как вручную, так и при помощи
 вспомогательного шаблона - обертки. Если у шаблона документа указан C<layout> в метаданных, то он будет
 использован как шаблон для форматирования объектной модели, вывод самого шаблона будет проигнорирован. Если
 обертка не задана, то результатом будет вывод самого скрипта шаблона.
 
+Использование объектной модели документа позволяет решить задачи по созданию элементов управления
+контейнеров, у которых может быть сложное содежимое. Примером таких элементов могут быть формы,
+внутри форм элементы управления могут группироваться.
+
 
 =head2 Порядок обработки документа
 
--- a/Lib/IMPL/Web/View/TTFactory.pm	Thu Apr 05 17:51:51 2012 +0400
+++ b/Lib/IMPL/Web/View/TTFactory.pm	Fri Apr 06 16:22:38 2012 +0400
@@ -5,6 +5,7 @@
 
 use IMPL::lang qw(:hash :declare :constants);
 use IMPL::Exception();
+use Scalar::Util qw(weaken);
 
 
 use parent qw(IMPL::Object::Factory);
@@ -25,12 +26,18 @@
 	die IMPL::ArgumentException("A template is required") unless $template;
 	
 	$options ||= {};
+	$context ||= new Template::Context($options);
 	
 	$this->template($template);
-	$this->context($context || new Template::Context($options));
-	$this->opts($options || {});
+	$this->context($context);
+	$this->opts($options);
 	$this->nodeProperties($nodeProps || {});
 	$this->instances(0);
+	
+	my $doc = delete $nodeProps->{document};
+	weaken($doc);
+	
+	$context->stash->set('require', sub { $doc->require(@_); } );
 }
 
 our %CTOR = (