- From: John Boyer <boyerj@ca.ibm.com>
- Date: Wed, 30 Jan 2008 14:55:01 -0500
- To: Forms WG (new) <public-forms@w3.org>
- Message-ID: <OFDB12AF44.7C6F694B-ON852573E0.006AD1C3-852573E0.006D686A@ca.ibm.com>
I'm sure you are all pretty much the same on this point, but I found
today's telecon pretty cool and stimulating.
For my own part I had previously recognized the similarity between <switch
... @case> and <select1 ref...>, but it was something I previously put
into the "coincidental parallelism" bucket because I select1 is a basic
form control, not a container control.
That being said, I have really never liked <switch ref="..." @case> as a
design because @case is essentially acting like a UI binding.
After today's discussion, I sat trying to rationalize in my mind all the
view points, and an idea came up that seems pretty cool to me, so I hope
you like it too.
Wouldn't it be cool to put <switch> inside of <select1>? It would look
like this:
<select1 ref="payment/methods/@method">
<label>Choose your payment method:</label>
<switch ref="..">
<case id="VISA"> <label>Visa</label> ...
<case id="MC"> <label>Mastercard</label> ...
<case id="COD"> <label>Cash on delivery</label> ...
</switch>
</select1>
There seem to be several benefits
1) We would have an actual UI binding from the select1 as the way to
automatically drive the switch case selection
2) We would retain switch as the *container* form control for UI
selection.
3) The switch ref is still able to reset the context relative to where the
data is stored.
4) We haven't yet even added any new vocabulary; just a new possible
content model for select1
5) We seem to get multicase switches seemingly for free by using select
rather than select1, again with no new vocabulary
A <toggle case="X"/> would make the selection in the switch, which would
in turn notify the select1 of the value change needed for its UI binding
Setting the value of the node referenced by the select1 would push a case
choice from the select1 to the contained switch automatically
The only issue to settle, then, would be whether it is worth the effort to
use a value space, rather than an id space, for case selection. We
discussed doing this via a value attribute, though I had thought for
consistency with the <item> element that it should be a child element of
case instead. Regardless of that choice, the above makes it clearer that
having the value space method for selecting cases would be preferable. So
it might look like this instead:
<select1 ref="payment/methods/@method">
<label>Choose your payment method:</label>
<switch ref="..">
<case>
<label>Visa</label>
<value>VISA</value>
...
</case>
<case>
<label>Mastercard</label>
<value>MC</value>
...
</case>
<case>
<label>Cash on delivery</label>
<value>COD</value>
...
</case>
</switch>
</select1>
This looks really cool because it is quite analogous to using <item> with
label and value children, except we are declaratively indicating that the
selection is being associated with switching among set of form controls.
It even becomes easy to see how to extend this to the "itemset" version by
using repeat inside switch! This would generate a variable number of
cases according to how much data there is.
Maybe we could consider whether all of this is good to go or some of it
should be deferred, but great fun in any *case*! (sorry)
What do people think about this approach?
John M. Boyer, Ph.D.
Senior Technical Staff Member
Lotus Forms Architect and Researcher
Chair, W3C Forms Working Group
Workplace, Portal and Collaboration Software
IBM Victoria Software Lab
E-Mail: boyerj@ca.ibm.com
Blog: http://www.ibm.com/developerworks/blogs/page/JohnBoyer
Blog RSS feed:
http://www.ibm.com/developerworks/blogs/rss/JohnBoyer?flavor=rssdw
Received on Wednesday, 30 January 2008 19:55:21 UTC