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&amp;7" symbol="23" />
              <vin value="WA1AV94L&amp;7" symbol="24" />
              <vin value="WA1BV74L&amp;7" symbol="24" />
              <vin value="WA1BV94L&amp;7" symbol="25" />
            </body>
          </model>
        </make>
        <make value="CADILLAC">
          <model value="ESCALADE">
            <body value="UTL4X2 4 Dr">
              <vin value="1GY&amp;C638&amp;7" symbol="23" />
            </body>
          </model>
          <model value="ESCALADE AWD">
            <body value="UTL4X4 4 Dr">
              <vin value="1GY&amp;K638&amp;7" symbol="23" />
            </body>
          </model>
          <model value="ESCALADE ESV AWD">
            <body value="UTL4X4 4 Dr">
              <vin value="3GY&amp;K668&amp;7" symbol="23" />
            </body>
          </model>
          <model value="ESCALADE EXT AWD">
            <body value="SUT4X4 4 Dr">
              <vin value="3GY&amp;K628&amp;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&amp;7" symbol="23" />
> > >>              <vin value="WA1AV94L&amp;7" symbol="24" />
> > >>              <vin value="WA1BV74L&amp;7" symbol="24" />
> > >>              <vin value="WA1BV94L&amp;7" symbol="25" />
> > >>            </body>
> > >>          </model>
> > >>        </make>
> > >>        <make value="CADILLAC">
> > >>          <model value="ESCALADE">
> > >>            <body value="UTL4X2 4 Dr">
> > >>              <vin value="1GY&amp;C638&amp;7" symbol="23" />
> > >>            </body>
> > >>          </model>
> > >>          <model value="ESCALADE AWD">
> > >>            <body value="UTL4X4 4 Dr">
> > >>              <vin value="1GY&amp;K638&amp;7" symbol="23" />
> > >>            </body>
> > >>          </model>
> > >>          <model value="ESCALADE ESV AWD">
> > >>            <body value="UTL4X4 4 Dr">
> > >>              <vin value="3GY&amp;K668&amp;7" symbol="23" />
> > >>            </body>
> > >>          </model>
> > >>          <model value="ESCALADE EXT AWD">
> > >>            <body value="SUT4X4 4 Dr">
> > >>              <vin value="3GY&amp;K628&amp;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

Reply via email to