diff Lib/IMPL/Web/Handler/TTView.pm @ 199:e743a8481327

Added REST support for forms (with only get and post methods)
author sergey
date Mon, 23 Apr 2012 01:36:52 +0400
parents
children a9dbe534d236
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Lib/IMPL/Web/Handler/TTView.pm	Mon Apr 23 01:36:52 2012 +0400
@@ -0,0 +1,79 @@
+package IMPL::Web::Handler::TTView;
+use strict;
+
+use IMPL::lang qw(:declare :constants);
+use IMPL::declare {
+	base => {
+		'IMPL::Object' => undef,
+		'IMPL::Object::Autofill' => '@_',
+		'IMPL::Object::Serializable' => undef
+	}
+};
+
+BEGIN {
+	public property contentType => PROP_GET | PROP_OWNERSET;
+	public property templates => PROP_GET | PROP_OWNERSET;
+}
+
+sub Invoke {
+	my ($this,$action,$next) = @_;
+	
+	my $result = $next ? $next->($action) : undef;
+	
+	my $doc = $this->templates->document(
+        'default',
+        {
+        	data => $result,
+        	action => $action,
+        	app => $action->application
+        }
+    );
+	
+	my $hout = $action->response->streamBody;
+    
+    print $hout $doc->Render();
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+C<IMPL::Web::Handler::TTView> - использует шаблоны для построения представления.
+
+=head1 SYNOPSIS
+
+=begin code xml
+
+<view type="HASH">
+    <item extname="@My::Data::Product">product/info</item>
+    <catalog>
+    <catalog>
+</view>
+
+=end code xml
+
+=head1 DESCRIPTION
+
+Подбирает шаблон для представления результата, полученного при выполнении следующего обработчика. При
+выборе используется принцип похожий на селекторы C<CSS>, основывающийся на именах ресурсов и их типах
+данных.
+
+=head1 SELECTORS
+
+=begin text
+
+[url-template] [class] => template
+
+shoes/      => product/list
+{action:*.} @My::Data::Product => product/{action}
+
+=end text
+
+
+
+=cut
+