Delayed output generation feature?
Dave Rolsky <[email protected]>
| Newsgroups | gmane.comp.web.mason.devel |
|---|---|
| Message-ID | <[email protected]> |
I've come up with an idea for a feature that is similar to one Jon has
proposed in the past, which he called placeholders, though I think my idea
of how it should work is slightly different.
Basically, what I'd like to do is mark a spot in the output as it's being
generated and say "fill this in later". The filling in would be done by
calling a code reference.
So for example I might have something like this:
<html>
<head>
% $m->delayed_output( sub { $m->comp('/lib/javascript_links.mas' ) } );
</head>
...
</html>
The idea here is that the code above would go in the autohandler but that
any subsequently called components could do something to determine what JS
links are generated.
The return value of $m->delayed_output() would be an object encapsulating
the code reference.
Of course, you can already get a _similar_ effect using filters. You
_can't_ do this with methods because you don't know what all of the
components that will be called are.
There's a couple things to consider to make this feature work:
1. It won't work when autoflush is on, obviously. I'd suggest that
calling the delayed_output() method just die if autoflush is on.
2. In the code in head, output is simply concatenated to a scalar
reference. This is a speed optimization (over using the buffer objects we
currently use).
To make this new feature work, we'd probably have to push items into an
array instead. Then when we go to send output we can iterate over the
array. If the array element is a plain scalar, we just send it. If it's
a HTML::Mason::DelayedOutput object we call a method on it.
This'd be slower than what's there but faster than the current stable
code.
So things to think about ...
- Is this a worthwhile feature?
- Is there a better/faster/cooler way to implement it?
- How to handle calls to flush_buffer when this has been used? Just call
the coderef then? die?
-dave
/*===================================================
VegGuide.Org www.BookIRead.com
Your guide to all that's veg. My book blog
===================================================*/
-------------------------------------------------------
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl