Mercurial > pub > Impl
comparison Lib/IMPL/Web/View/TTView.pm @ 351:cfd7570c2af2
working on TTView: created TTView class for rendering models
author | cin |
---|---|
date | Tue, 08 Oct 2013 17:40:35 +0400 |
parents | |
children | feeb3bc4a818 |
comparison
equal
deleted
inserted
replaced
350:f356c4894d1b | 351:cfd7570c2af2 |
---|---|
1 package IMPL::Web::View::TTView; | |
2 use strict; | |
3 | |
4 use IMPL::Const qw(:prop); | |
5 use IMPL::declare { | |
6 require => { | |
7 Context => 'IMPL::Web::View::TTContext' | |
8 }, | |
9 base => [ | |
10 'IMPL::Object' => undef, | |
11 'IMPL::Object::Autofill' => '@_', | |
12 'IMPL::Object::Serializable' => undef | |
13 ], | |
14 props => [ | |
15 options => PROP_RW, | |
16 view => PROP_RW, | |
17 layout => PROP_RW, | |
18 tt_ext => PROP_RW, | |
19 includes => PROP_RW | PROP_LIST | |
20 ] | |
21 }; | |
22 | |
23 sub CTOR { | |
24 my ($this) = @_; | |
25 | |
26 $this->tt_ext('tt') unless defined $this->tt_ext; | |
27 } | |
28 | |
29 sub display { | |
30 my ($this,$model,$template,$args) = @_; | |
31 | |
32 my $context = Context->new($this->options); | |
33 my $layout = delete $args->{layout}; | |
34 | |
35 return $context->invoke_environment( | |
36 sub { | |
37 my $ctx = shift; | |
38 if ($layout) { | |
39 return $ctx->invoke_environment( | |
40 sub { | |
41 return $ctx->render($layout,$args); | |
42 }, | |
43 { | |
44 base => $this->layout, | |
45 content => sub { | |
46 $ctx->invoke_environment( | |
47 sub { | |
48 return shift->display($model,$template,$args); | |
49 }, | |
50 { | |
51 base => $this->view | |
52 } | |
53 ) | |
54 } | |
55 } | |
56 ); | |
57 } else { | |
58 return $ctx->invoke_environment( | |
59 sub { | |
60 return $ctx->display($model,$template,$args); | |
61 }, | |
62 { | |
63 base => $this->view | |
64 } | |
65 ); | |
66 } | |
67 },{ | |
68 includes => scalar($this->includes), | |
69 tt_ext => 'tt', | |
70 document => {}, | |
71 debug => sub { | |
72 warn @_; | |
73 } | |
74 } | |
75 ); | |
76 } | |
77 | |
78 1; |