changeset 300:bf3af33b9003

sync
author cin
date Fri, 22 Mar 2013 01:05:11 +0400
parents bd79145657e5
children aeeb57a12046
files Lib/IMPL/Web/View/TTControl.pm Lib/IMPL/Web/View/TTDocument.pm Lib/IMPL/Web/View/TTFactory.pm
diffstat 3 files changed, 31 insertions(+), 55 deletions(-) [+]
line wrap: on
line diff
--- a/Lib/IMPL/Web/View/TTControl.pm	Thu Mar 21 16:00:09 2013 +0400
+++ b/Lib/IMPL/Web/View/TTControl.pm	Fri Mar 22 01:05:11 2013 +0400
@@ -31,7 +31,7 @@
     }
 }
 
-our $AutoloadRegex = qr/^[a-z]/;
+our $AUTOLOAD_REGEX = qr/^[a-z]/;
 
 sub CTOR {
     my ($this,$template,$context,$attrs) = @_;
@@ -96,7 +96,7 @@
     
     return if $method eq 'DESTROY';
     
-    if ($method =~ /$AutoloadRegex/) {
+    if ($method =~ /$AUTOLOAD_REGEX/) {
         my $this = shift;
         
         die OperationException->new("can't invoke method '$method' on an unblessed reference") unless blessed $this;
@@ -166,19 +166,6 @@
 
 Выполнение данного блока производится фабрикой элементов управления.
 
-=head3 CTOR
-
-данный блок выполняется каждый раз при создании нового экземпляра элемента
-управления, при этом переменная C<this> указывает на эземпляр элемента
-упарвления. Данный блок можно использовать для инициализации свойств элемента
-управления.
-
-=head3 RENDER
-
-Данный блок выполняется при вызове метода C<Render()>, вывод данного блока и
-есть результат отображения элемента управления. Если в шаблоне нет блока
-C<RENDER>, то сам шаблон считается таковым. 
-
 =head2 TEMPLATE VARS
 
 Каждый шаблон имеет собственное пространство имен, вложенное в пространство имен
@@ -223,24 +210,22 @@
 
 =head1 MEMBERS
 
-=over
-
-=item * C<[get]context>
+=head2 C<[get]context>
 
-Контекст элемента управления, хранит пременные шаблона. Передается в
-конструкторе. Фабрика элементов управления создает новый контекст пространство
-имен которого вложено в пространство имен документа.
+Контекст элемента управления, хранит пременные шаблона. Фабрика элементов
+управления создает новый контекст пространство имен которого вложено в
+пространство имен документа.
 
-=item * C<[get,set]template>
+Контекст следует использовать только при рендеринге документа.
+
+=head2 C<[get,set]template>
 
 C<Template::Document> Шаблон элемента управления.
 
-=item * C<AUTOLOAD>
+=head2 C<AUTOLOAD>
 
 Для удобства работы с шаблоном, элементы управления предоставляю доступ к своим
 свойствам через метод C<AUTOLOAD>. Имена свойств должны начинаться со строчной
 буквы.
 
-=back
-
 =cut
\ No newline at end of file
--- a/Lib/IMPL/Web/View/TTDocument.pm	Thu Mar 21 16:00:09 2013 +0400
+++ b/Lib/IMPL/Web/View/TTDocument.pm	Fri Mar 22 01:05:11 2013 +0400
@@ -17,7 +17,7 @@
         'IMPL::Web::View::TTControl' => sub {
             my ($template,$ctx) = @_;
             $ctx ||= Template::Context->new();
-            return 'document', $template, $ctx;  # context
+            return $template, $ctx;  # context
         }
     ],
     props => [
@@ -29,15 +29,11 @@
 sub CTOR {
     my ($this,$template,$ctx,$loader,$vars) = @_;
     
-    $this->controls({});
     $this->loader($loader) if $loader;
-    
     $this->layout( $template->layout ) unless $this->layout;
     
     $this->context->stash->update($vars)
         if ref $vars eq 'HASH';
-    
-    $this->InitInstance();
 }
 
 sub Render {
--- a/Lib/IMPL/Web/View/TTFactory.pm	Thu Mar 21 16:00:09 2013 +0400
+++ b/Lib/IMPL/Web/View/TTFactory.pm	Fri Mar 22 01:05:11 2013 +0400
@@ -15,67 +15,56 @@
     },
     base => [
         'IMPL::Object::Factory' => sub {
-            shift->class || 'IMPL::Web::View::TTControl'
+            shift;
         }
     ],
     props => [
         template => PROP_RW,
         context => PROP_RW,
         instances => PROP_RW,
-        base => PROP_RW,
+        baseLocation => PROP_RW,
         require => PROP_RO
     ]
 };
 
 sub CTOR {
-    my ($this,$template,$context,$base,$require) = @_;
+    my ($this,$class,$template,$context,$baseLocation,$require) = @_;
     
     die IMPL::ArgumentException("A template is required") unless $template;
     
-    Loader->safe->Require($this->factory)
-        if $this->factory and not ref $this->factory;
+    Loader->safe->Require($class)
+        if $class and not ref $class;
     
     $context ||= new Template::Context();
     
     $this->template($template);
     $this->context($context);
-    $this->base($base);
+    $this->baseLocation($baseLocation);
     $this->instances(0);
     $this->require($require);
 }
 
 sub MergeParameters {
-    my ($this,$name,$refProps) = @_;
-    
-    if (ref $name) {
-        $refProps = $name;
-        $name = (ref $refProps eq 'HASH' and ($refProps->{name} || $refProps->{id})) || '*anonymous*';
-    }
+    my ($this,$refProps) = @_;
     
     $refProps->{factory} = $this;
     
-    my $base = $this->base;
-    
-    $this->context->localise();
+    my $baseLocation = $this->baseLocation;
     
-    my $ctx = _clone_context($this->context);
+    my $ctx = $this->CloneContext();
     
-    $this->context->delocalise();
-    
-    my $stash = $ctx->stash;
     my $require = $this->require;
     
-    
-    $stash->update({
+    $ctx->stash->update({
         require => sub {
             my ($module) = @_;
             
-            $module =~ s/^\.\//$base\//;
+            $module =~ s/^\.\//$baseLocation\//;
             return $require->($module);
         }        
     });
     
-    return ($name, $this->template, $ctx, $refProps);
+    return ($this->template, $ctx, $refProps);
 }
 
 sub CreateObject {
@@ -102,10 +91,16 @@
     return $instance;
 }
 
-sub _clone_context {
-    my $args = { %{shift || {}} };
+sub CloneContext {
+    my ($this) = @_;
+    
+    $this->context->localise();
+    
+    my $args = { %{$this->context} };
     delete $args->{CONFIG};
     
+    $this->context->delocalise();
+    
     return Template::Context->new($args);
 }