[dancer-users] Delayed template processing
Joerg Fallmann
fall at tbi.univie.ac.at
Tue Oct 27 17:57:50 GMT 2015
Hi,
In my view2.tt I call AJAX which loads the rest of the
data from other routes, so pretty much as you described.
Parameter passing is now done via session cookies and handling
of the results is done via datatables.
Once I'm done with my app I can write some documentation
and put it somewhere
--joerg
On 10/16/2015 05:05 PM, John Stoffel wrote:
> Thanks for posting your example, this should be documented
> somewhere... but I also wonder if you really just need to put a <div>
> into your template and have your javascript just load more data from a
> seperate route into that div which could then scroll, re-draw, or
> whatever.
>
> Basically, if you have a long running process, how would you handle
> pagination of the results using your method? And what does your
> view2.tt contain as well?
>
> Joerg> Thanks to everyone involved I finally managed to get it done;
>
> Joerg> For people with the same problem, here is an example for what I did,
>
> Joerg> my $parameterhash;
> Joerg> get '/routeA/:*?' => sub {
> Joerg> my $id = params->{'id'};
> Joerg> my $blub = params->{'blub'};
> Joerg> delayed {
> Joerg> my $tt = Template->new(
> Joerg> {INCLUDE_PATH => "$path",
> Joerg> WRAPPER => 'layout.tt',
> Joerg> RELATIVE => 1,
> Joerg> }) || die "Template error: $Template::ERROR\n";
> Joerg> $tt->process('view.tt', {
> Joerg> 'id' => $id,
> Joerg> 'bla' => $blub
> Joerg> };
> Joerg> content $tt;
> Joerg> done;
> Joerg> ## Manual states from here on we can do whatever we want without intereferring with the stream
> Joerg> $parameterhash =
> Joerg> {
> Joerg> 'id' => $id,
> Joerg> 'bla' => $blub
> Joerg> };
> Joerg> };
> Joerg> };
>
> Joerg> get '/routeB/:*?' => sub {
> Joerg> ## parameters are now fetched from the parameterhash reference
> Joerg> my $id = $parameterhash->{'id'};
> Joerg> my $blub = $parameterhash->{'bla'};
>
> Joerg> # Do something from here on
> Joerg> my $addition = "something";
> Joerg> delayed {
> Joerg> my $tt = Template->new(
> Joerg> {INCLUDE_PATH => "$path",
> Joerg> WRAPPER => 'layout.tt',
> Joerg> RELATIVE => 1,
> Joerg> }) || die "Template error: $Template::ERROR\n";
> Joerg> $tt->process('view2.tt', {
> Joerg> 'id' => $id,
> Joerg> 'bla' => $blub
> Joerg> 'addition' => $addition
> Joerg> };
> Joerg> content $tt;
> Joerg> done;
> Joerg> };
>
> Joerg> In the template view.tt
> Joerg> I simply added
>
> Joerg> <script type="text/javascript">
> Joerg> $(document).ready( function () {
> Joerg> // Javascript URL redirection after 5 seconds
> Joerg> setTimeout(function() {
> Joerg> var str = window.location.href;
> Joerg> var res = str.replace("routeA", "routeB");
> Joerg> window.location.replace(res);
> Joerg> }, 5000);
> Joerg> });
> Joerg> </script>
>
> Joerg> which forwards to routeB,
> Joerg> seems to work fine.
>
> Joerg> The way I use it now I do not need delayed actually,
> Joerg> but it doesn't hurt, so I keep for the moment.
>
> Joerg> Thanks again to everybody!
>
> Joerg> --joerg
>
> Joerg> On 10/16/2015 01:51 PM, Clive Eisen wrote:
>
> Joerg> Other people have told you how to do this
>
> Joerg> In your template have callbacks to OTHER routes that return the rest of the data as and when it’s available
>
> Joerg> If you insist use the same route and figure out from a param whether its the initial call or a callback
>
> Joerg> As far as I can tell once you have served a template that request is closed
>
> Joerg> --
> Joerg> Clive Eisen
> Joerg> GPG: 75056DD0
>
> Joerg> On 16 Oct 2015, at 11:31, Joerg Fallmann <fall at tbi.univie.ac.at> wrote:
>
> Joerg> To circumvent this I thought about forwarding to another route
> Joerg> after processing a template,
> Joerg> this should actually work around the update existing output problem,
> Joerg> but it seems this is not possible either
> Joerg> so I really got no idea how to proceed at the moment.
>
> Joerg> --joerg
>
> Joerg> On 10/16/2015 09:05 AM, Yitzchak Scott-Thoennes wrote:
>
> Joerg> For this to work, you'd either need a template engine that is tightly integrated into Dancer or a streaming template engine (that would call a callback to call content as it got chunks) with the ability to loop over iterators or trigger callbacks to get more data to format. Though I guess you could use a normal template loop over a tied array too.
>
> Joerg> But I don't know of such a template engine.
>
> Joerg> _______________________________________________
> Joerg> dancer-users mailing list
>
> Joerg> dancer-users at dancer.pm
> Joerg> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
>
> Joerg> _______________________________________________
> Joerg> dancer-users mailing list
> Joerg> dancer-users at dancer.pm
> Joerg> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
>
> Joerg> _______________________________________________
> Joerg> dancer-users mailing list
> Joerg> dancer-users at dancer.pm
> Joerg> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
>
> Joerg> _______________________________________________
> Joerg> dancer-users mailing list
> Joerg> dancer-users at dancer.pm
> Joerg> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
> _______________________________________________
> dancer-users mailing list
> dancer-users at dancer.pm
> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
More information about the dancer-users
mailing list