Here's a fully working version with the paths hard-coded.
You can see how ugly it is (and probably inefficient).
If there were some way to grab the datapath of a combobox as
_text_, then I could append to the path and use it to set the
datapath of the next combobox.
The problem is, when you say something like...
Debug.write( byear.getAttribute('datapath') );
...it prints the actual data that it's pointing to
in the dataset, not the path as text. :(
So, I'm not sure there's any way to get at the datapath
as a string once you've set it.
<canvas width="600" height="400">
<class name="textlistitemx" extends="textlistitem">
<method event="ondata">
<!-- if I'm the first (or only) item in the list, -->
<!-- make my parent select me -->
<![CDATA[
if( !this['clonenumber'] || this.clonenumber == 0 )
this.parent.select(this);
]]>
</method>
</class>
<dataset name="ds_symbols">
<symbols>
<year value="2007">
<make value="AUDI">
<model value="Q7 QUATTRO">
<body value="UTL4X4 4 Dr">
<vin value="WA1AV74L&7" symbol="23" />
<vin value="WA1AV94L&7" symbol="24" />
<vin value="WA1BV74L&7" symbol="24" />
<vin value="WA1BV94L&7" symbol="25" />
</body>
</model>
</make>
<make value="CADILLAC">
<model value="ESCALADE">
<body value="UTL4X2 4 Dr">
<vin value="1GY&C638&7" symbol="23" />
</body>
</model>
<model value="ESCALADE AWD">
<body value="UTL4X4 4 Dr">
<vin value="1GY&K638&7" symbol="23" />
</body>
</model>
<model value="ESCALADE ESV AWD">
<body value="UTL4X4 4 Dr">
<vin value="3GY&K668&7" symbol="23" />
</body>
</model>
<model value="ESCALADE EXT AWD">
<body value="SUT4X4 4 Dr">
<vin value="3GY&K628&7" symbol="25" />
</body>
</model>
</make>
</year>
</symbols>
</dataset>
<datapointer name="dp1" />
<simplelayout axis="y"/>
<combobox editable="false" name="cbyear" datapath="ds_symbols:/symbols">
<method event="onselect">
var dp = "ds_symbols:/symbols/" +
"[EMAIL PROTECTED]'" + this.value + "']";
parent.cbmake.setDatapath( dp );
</method>
<textlistitemx datapath="year"
text="$path{'@value'}" value="$path{'@value'}" />
</combobox>
<combobox editable="false" name="cbmake" datapath="" visible="true">
<method event="onselect">
var dp = "ds_symbols:/symbols/" +
"[EMAIL PROTECTED]'" + parent.cbyear.value + "']/" +
"[EMAIL PROTECTED]'" + this.value + "']";
parent.cbmodel.setDatapath( dp );
</method>
<textlistitemx datapath="make"
text="$path{'@value'}" value="$path{'@value'}" />
</combobox>
<combobox editable="false" name="cbmodel" datapath="" visible="true">
<method event="onselect">
var dp = "ds_symbols:/symbols/" +
"[EMAIL PROTECTED]'" + parent.cbyear.value + "']/" +
"[EMAIL PROTECTED]'" + parent.cbmake.value + "']/" +
"[EMAIL PROTECTED]'" + this.value + "']";
parent.cbbody.setDatapath( dp );
</method>
<textlistitemx datapath="model"
text="$path{'@value'}" value="$path{'@value'}" />
</combobox>
<combobox editable="false" name="cbbody" datapath="" visible="true">
<method event="onselect">
var dp = "ds_symbols:/symbols/" +
"[EMAIL PROTECTED]'" + parent.cbyear.value + "']/" +
"[EMAIL PROTECTED]'" + parent.cbmake.value + "']/" +
"[EMAIL PROTECTED]'" + parent.cbmodel.value + "']/" +
"[EMAIL PROTECTED]'" + this.value + "']";
parent.cbvin.setDatapath( dp );
</method>
<textlistitemx datapath="body"
text="$path{'@value'}" value="$path{'@value'}" />
</combobox>
<combobox editable="false" name="cbvin" datapath="" visible="true">
<method event="onselect">
var dp = "ds_symbols:/symbols/" +
"[EMAIL PROTECTED]'" + parent.cbyear.value + "']/" +
"[EMAIL PROTECTED]'" + parent.cbmake.value + "']/" +
"[EMAIL PROTECTED]'" + parent.cbmodel.value + "']/" +
"[EMAIL PROTECTED]'" + parent.cbbody.value + "']/" +
"[EMAIL PROTECTED]'" + this.value + "']/@symbol";
parent.vsymbol.tsymbol.setDatapath( dp );
</method>
<textlistitemx datapath="vin"
text="$path{'@value'}" value="$path{'@value'}" />
</combobox>
<view bgcolor="silver" name="vsymbol">
<text x="4" y="3" name="tsymbol" visible="true"
width="${parent.parent.cbyear.width-4}"
height="${parent.parent.cbyear.height-3}"/>
</view>
</canvas>
-----Original Message-----
From: J Crowley [mailto:[EMAIL PROTECTED]
Sent: Tuesday, October 03, 2006 1:00 PM
To: William Krick
Subject: Re: [Laszlo-user] how do I get a datapointer from within a
control?
Ah, sorry, I think I did kind of misread your question. I'll think
about this and have a better answer for you in a bit.
On 10/3/06, William Krick <[EMAIL PROTECTED]> wrote:
> In order to make that work, I need to be able to do three things.
>
> 1) get the datapointer from a combobox
>
> 2) append to the datapointer path
>
> 3) use the appended datapointer to set the datapath on another combobox
>
> I'm guessing in order to do this, I'll have to have some way to convert a
> datapointer to a datapath and back again.
>
>
>
>
>
> -----Original Message-----
> From: J Crowley [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, October 03, 2006 1:29 AM
> To: [EMAIL PROTECTED]
> Cc: [email protected]
> Subject: Re: [Laszlo-user] how do I get a datapointer from within a
> control?
>
>
> Hey, William.
>
> You can find some documentation on the function in
> http://www.laszlosystems.com/lps-3.3/docs/reference/datapointer.html
> about halfway down the page.
>
> IIRC, the way you use it is, say you have two datapointers, DP1 and
> DP2. So, in a script somewhere, you'd have:
>
> DP1.setFromPointer("DP2");
>
> ...which would set DP1 to the same dataset/location/etc as DP2.
>
> Hope this is helpful. I can provide examples if you need them; I
> think it's also used in some stuff in svn.openlaszlo.org/labs and a
> few other places.
>
> - Josh
>
> On 10/2/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> > No, but I'll look into it. Is there any documentation or examples you
> > can point me at so I can see how it's used?
> >
> >
> >
> > Quoting J Crowley <[EMAIL PROTECTED]>:
> >
> > > Sorry, I might be misreading/misinterpreting your question, but have
> > > you tried setFromPointer()?
> > >
> > > - Josh
> > >
> > > On 10/2/06, William Krick <[EMAIL PROTECTED]> wrote:
> > >> In my example code below, there's an "onselect" method for the first
> > >> combobox.
> > >>
> > >> While the code works, I need it to be more generic so that I can
apply
> the
> > >> same logic to the rest of the comboboxes.
> > >>
> > >> Basically, from inside a combobox, I need to build a new datapath
based
> on
> > >> where I currently am, and then use that to set the datapath on the
next
> > >> combobox...
> > >>
> > >>
> > >> var dp = this.getAttribute('datapath') + "[EMAIL PROTECTED]'" +
> > >> this.value +
> "']" ;
> > >> next_combobox.setDatapath( dp );
> > >>
> > >>
> > >> Of course, that doesn't work.
> > >>
> > >> I'm sure there's some XPath magic involved but I can't find a good
> example.
> > >>
> > >>
> > >> Any ideas?
> > >>
> > >>
> > >>
> > >>
> > >>
> > >> <canvas width="600" height="400">
> > >>
> > >> <class name="textlistitemx" extends="textlistitem">
> > >> <method event="ondata">
> > >> <!-- if I'm the first (or only) item in the list, -->
> > >> <!-- make my parent select me -->
> > >> <![CDATA[
> > >> if( !this['clonenumber'] || this.clonenumber == 0 )
> > >> this.parent.select(this);
> > >> ]]>
> > >> </method>
> > >> </class>
> > >>
> > >>
> > >> <dataset name="ds_symbols">
> > >> <symbols>
> > >> <year value="2007">
> > >> <make value="AUDI">
> > >> <model value="Q7 QUATTRO">
> > >> <body value="UTL4X4 4 Dr">
> > >> <vin value="WA1AV74L&7" symbol="23" />
> > >> <vin value="WA1AV94L&7" symbol="24" />
> > >> <vin value="WA1BV74L&7" symbol="24" />
> > >> <vin value="WA1BV94L&7" symbol="25" />
> > >> </body>
> > >> </model>
> > >> </make>
> > >> <make value="CADILLAC">
> > >> <model value="ESCALADE">
> > >> <body value="UTL4X2 4 Dr">
> > >> <vin value="1GY&C638&7" symbol="23" />
> > >> </body>
> > >> </model>
> > >> <model value="ESCALADE AWD">
> > >> <body value="UTL4X4 4 Dr">
> > >> <vin value="1GY&K638&7" symbol="23" />
> > >> </body>
> > >> </model>
> > >> <model value="ESCALADE ESV AWD">
> > >> <body value="UTL4X4 4 Dr">
> > >> <vin value="3GY&K668&7" symbol="23" />
> > >> </body>
> > >> </model>
> > >> <model value="ESCALADE EXT AWD">
> > >> <body value="SUT4X4 4 Dr">
> > >> <vin value="3GY&K628&7" symbol="25" />
> > >> </body>
> > >> </model>
> > >> </make>
> > >> </year>
> > >> </symbols>
> > >> </dataset>
> > >>
> > >>
> > >> <simplelayout axis="y"/>
> > >>
> > >> <combobox editable="false" name="cbyear"
> datapath="ds_symbols:/symbols">
> > >> <method event="onselect">
> > >> var dp = "ds_symbols:/symbols/[EMAIL PROTECTED]'" + this.value +
"']";
> > >> parent.cbmake.setDatapath( dp );
> > >> </method>
> > >> <textlistitemx datapath="year"
> > >> text="$path{'@value'}" value="$path{'@value'}" />
> > >> </combobox>
> > >>
> > >> <combobox editable="false" name="cbmake" datapath="">
> > >> <method event="onselect">
> > >> // ???
> > >> </method>
> > >> <textlistitemx datapath="make"
> > >> text="$path{'@value'}" value="$path{'@value'}" />
> > >> </combobox>
> > >>
> > >> <combobox editable="false" name="cbmodel" datapath="">
> > >> <method event="onselect">
> > >> // ???
> > >> </method>
> > >> <textlistitemx datapath="model"
> > >> text="$path{'@value'}" value="$path{'@value'}" />
> > >> </combobox>
> > >>
> > >> <combobox editable="false" name="cbbody" datapath="">
> > >> <method event="onselect">
> > >> // ???
> > >> </method>
> > >> <textlistitemx datapath="body"
> > >> text="$path{'@value'}" value="$path{'@value'}" />
> > >> </combobox>
> > >>
> > >> <combobox editable="false" name="cbvin" datapath="">
> > >> <method event="onselect">
> > >> // ???
> > >> </method>
> > >> <textlistitemx datapath="vin"
> > >> text="$path{'@value'}" value="$path{'@value'}" />
> > >> </combobox>
> > >>
> > >>
> > >> </canvas>
> > >>
> > >>
> > >> _______________________________________________
> > >> Laszlo-user mailing list
> > >> [email protected]
> > >> http://www.openlaszlo.org/mailman/listinfo/laszlo-user
> > >>
> >
> >
> >
> >
> > _______________________________________________
> > Laszlo-user mailing list
> > [email protected]
> > http://www.openlaszlo.org/mailman/listinfo/laszlo-user
> >
>
>
>
> _______________________________________________
> Laszlo-user mailing list
> [email protected]
> http://www.openlaszlo.org/mailman/listinfo/laszlo-user
>
_______________________________________________
Laszlo-user mailing list
[email protected]
http://www.openlaszlo.org/mailman/listinfo/laszlo-user