I didn't look at this too carefully, but I think you want to use a state.

<class name="survey">
    <!-- ENUM 0: foo, 1: radio, 2: freeform, -->
    <attribute name="type" type="number" value=

    ...
    <state name="radios" apply="${ classroot.type == 1 }"
        <radiogroup>
        ...

    <state name="freeform" apply="${ classroot.type == 2 }"
        <edittext/>
        ...

http://www.openlaszlo.org/lps-latest/docs/reference/state.html

You can data bind the type attribute (though watch out, it'll always be a
string (right, Tucker?)) like this:

    <survey datapath="surveys/survey" type="$path{ 'question/@type' }">

A

On May 22, Mason Taube wrote:

> i'm writing the canonical survey app that everyone seems to write when they 
> start with laszlo. 
>  
>  the xml has a format like this:
>  
>  <surveys><survey><question><text>this is mult choice 
> question</text><choices><choice>a</choice><choice>b</choice></choices></survey></surveys>
>  
>  it works well but we would like to support freeform text (and maybe other 
> input types as well in the future).. we've added a 'type' on the question. if 
> type is 2 i would like to use an edittext component instead of a radiogroup. 
> 
> 
> 
>  <surveys><survey><question type='2'><text>this is a text only 
> question</text></question></survey></surveys>
>  
>  what is the cleanest way of doing this in lzx?
>  
> 
> 
> thanks
>  
>  
> code:
>    <class name="surveydialog" extends="modaldialog"
>            title="Survey"
>            x="50"
>            y="50" width="500" height="400">
>         <attribute name="surveyNumber" value="1" type="string"/>
>         <Beeper id="beeper"/>
>         <view id="surveyView" 
> datapath="${'surveyData:/surveys/survey['+parent.surveyNumber+']/question[1]'}">
>         <method event="oninit">
>                                 Debug.write(this.datapath.serialize());
>         </method>
>             <datapointer id="sDp" 
> xpath="${'surveyData:/surveys/survey['+parent.parent.surveyNumber+']/question[1]'}">
>                 
>                 <method event="ondata">
>                     Debug.write(this.serialize());
>                 </method>
>             </datapointer>
>             <simplelayout/>
>             <attribute name="questionId" value="$path{'@id'}"/>
>             <text id="t" text="$path{'text/text()'}" resize="true" 
> multiline='true' width='450'/>
>             <radiogroup id="foo" name="votecombo"
>                         layout="class: simplelayout; axis: y; spacing:6" 
> x="5" y="5" width="130"
>                     >
>                 
>                 <radiobutton datapath="choices/choice" text="$path{'text()'}" 
> value="$path{'text()'}"
>                              selected="$path{'@selected'}">
>                     <attribute name="answerId" value="$path{'@id'}"/>
>                     <method event="onclick">
>                         var d=canvas.datasets.surveyData;
>                         var p=new LzParam();
> 
>                         p.addValue(parent.parent.questionId,this.answerId, 
> true);
> 
>                         d.setQueryType("POST");
>                         d.setQueryString(p); // 3c
>                         d.doRequest();
> 
>                         if (sDp.selectNext()) {
>                         surveyView.datapath.setPointer(sDp.p);
>                         } else
>                         {
>                             surveyView.setVisible(false);
>                             surveyConfirmView.setVisible(true);
>                         }
>                     </method>
>                 </radiobutton>
>             </radiogroup>
>             <button>Previous Question
>                 <method event="onclick">
>                     if (sDp.selectPrev()) {
>                     surveyView.datapath.setPointer(sDp.p);
>                     }
>                 </method>
>             </button>
>             <button>Next Question
>                 <method event="onclick">
>                     if (sDp.selectNext()) {
>                     surveyView.datapath.setPointer(sDp.p);
>                     } else
>                     {
>                      surveyView.setVisible(false);
> 
>                    surveyConfirmView.setVisible(true);
>                     }
>                 </method>
>             </button>
>         </view>
> 
> </class>
>                               
> 
> 
_______________________________________________
Laszlo-user mailing list
[email protected]
http://www.openlaszlo.org/mailman/listinfo/laszlo-user

Reply via email to