I spent last 24 hours figured out a nice way to play JavaScript::Writer with Template::Declare. It was super neat. Download the this zip and check out the source code. It depends on an future version of JavaScript::Writer module that had not been released to CPAN yet, so it won't work for you. But you can see the source code in lib/JT/View.pm, line 141: link_to( "Hello", href => "http://google.com", onclick => ajax_replace( "#area", "data/hello.html" ) ); And line 109, for the definition of ajax_replace: sub ajax_replace { my ( $target, $uri ) = @_; return sub { jQuery("#loading")->fadeIn( sub { jQuery("#area")->load($uri)->show( sub { jQuery("#loading")->fadeOut(); } ); } ); js->append("return false;"); }; } It returns a Perl sub, and eventually converted to a Javascript function that work as the onclick handler. One nice feature is, although the A tag and onclick handlers are put together in Perl code, they are seperated in HTML code. All generated javascript are put to the end of body. A elements get an auto-generated ID for latter reference. And it's all kept in perl so programmer worries nothing. Now it works great with CGI::Minimal, no model code in this spike. I want to somehow make a better integration of such concept into Jifty, or Catalyst. That feels like an assignment to myself in the coming OSDC.tw and YAPC::Asia

Labels: javascript, perl