RE: Manipulating Interface Elements

Hi jason,

Jason Foster wrote:
> I've been asked to implement an interface that uses multiple pulldown
> lists to navigate through a tree of information.  When an item from the
> "top level" pulldown is selected, the items in the "second level"
> pulldown change accordingly.  The tree will likely be 6 or 7 levels deep.
> I know how I would do this in an HTML browser using JavaScript and the
> HTML DOM. What I'm trying to figure out is how to accomplish this using
> XForms.  Just to make like interesting, the pulldowns should be embedded
> in an SVG document so that the SVG document can be altered as the pulldown
> selections change.

If you have to use 'pulldowns' then you could do this with a switch/case
statement. I guess the complexity depends on whether you mean that you have
*only* 6 or 7 pulldowns, that simply change their values depending on those
further up the hierarchy, or whether each pulldown can cause other different
pulldowns to be relevant, in which case the number of pulldowns will grow
exponentially! If it's the latter situation then a switch/case solution may
become quite unwieldy.

> My guess is that I would change the portions of the document that define
> the XForms interface using the standard DOM interfaces.  In other words,
if
> I want to change the items in an xforms:selectOne, I would construct the
> appropriate <item> nodes the append them.

I don't see how you can, since there is no DOM interface for XForms. One
definitely must be defined, but you can't assume that XForms will only exist
in XHTML, so you can't rely on some future XForms DOM looking like the XHTML
DOM.

> I'm a little shaky on section 8.11.3 which seems almost appropriate,
except 
> that I get the impression that the <itemset> needs to be present in the 
> original markup.  In my situation there's a chance that I'll be using the 
> DOM3 "load()" function to retrieve information dynamically, which won't
let 
> me specify the <itemset> in the original document.

I think you are right. The xforms:itemset must be in the original document,
and unfortunately the instance data used will only be the data that exists
at the beginning.

The only approach I can see that doesn't break the current spec, would be to
use the 'load instance' feature of xforms:submitInfo, to get just the data
that you want, as and when you need it. Then use an xforms:repeat element
pointing to this changing data. Nested repeats would give you all of the
nesting aspects that you are trying to get; you could use the cursor()
function to get the particular setting of the parent repeat, so that you
know what data to show in the nested repeat.

If you have any of the data and SVG that you are using, and you are prepared
to release it to us, we'd appreciate a copy and a brief description of what
you want it to do. It sounds like it would be a good test for our processing
engine.

Regards,

Mark


Mark Birbeck
Managing Director
x-port.net Ltd.
4 Pear Tree Court
London
EC1R 0DS

E: Mark.Birbeck@x-port.net
W: www.x-port.net
T: +44 (20) 7689 9232
Co-author Professional XML and
Professional XML Meta Data,
both by Wrox Press

Received on Friday, 17 May 2002 11:42:14 UTC