Heya all.

First post, cracking good framework, am much taken with it. It Does
Things Right(TM). Props, Kevin et al.

I have a question of best practice in TurboGears:

I've got a method (Root.page()), w/kid template (page.kid) that spits
out a full html document to the browser. I then want to update a
section of that page using AJAX-funkyness. In my case I want to
AJAX-update the contents of a table depending on user choices.

AFAICS, the recomended way of doing this seems to be request a JSON
data structure, then construct the table out of that in javascript. I
don't like this because you have two seperate locations where you have
to specify how to construct the table HTML, i.e. in the kid template
and in the javascript (bye-bye DRY)

I would prefer to use kid to do all my HTML generation ('cos its damn
good at it, and 'cos javascript isn't). I think I want to be able to
call a method via an AJAX request that returns the kid-generated HTML
(as opposed to JSON), and swap this directly into the DOM.

I can think of a few ways of doing this:

a) specifying a ajax parameter flag on the AJAX call, and using
tg_template in Root.page() to change the template to generate only be
the part I want (i.e. the table). This requires an additional template
with just the table in it, again breaking the DRY concept. You could
use py:def/py:match to alleviate some repetition, but I don't like the
idea of an extra one line file.

b) using the AJAX request to grabbing the whole HTML document and using
the DOM API to extract just the table part via id, and use that to
update the live page. This seems a little clumsy and bandwidth
inefficient, but requires no parameters or extra templates.

c) have an extra method that returns just the table HTML. You could use
this in the AJAX request, and you could also use it in the original
Root.page() method
and associated template.

So far, I'm opting for c), but is there a better way to do it? Any
thoughts?

-- 
wavy davy

Reply via email to