Sunday, February 03, 2008

JavaScript::Writer + Template::Declare

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

0 意見:

My Bicycle Rides