Thank you for the help. Much appreciated. It would've taken me many hours to sort 'em out all.
jGc For those reading this thread, mind the , near (text-input #:attributes `((class ,(format "field text ~a" classes .... On Thu, Dec 29, 2011 at 7:57 PM, Jay McCarthy <jay.mccar...@gmail.com> wrote: > On Thu, Dec 29, 2011 at 2:42 PM, J G Cho <g...@fundingmatters.com> wrote: >> After tinkering with Formlets a bit, I have some questions for the experts. >> >> 1. I am trying to use Formlet with Template to piggy back >> on some given CSS/JSs (from Wufoo in this instance), >> which means I have to provide lots of #attributes and ((class "left >> right large small")) >> So, I am forced to do >> >> (span >> ,{(to-string >> (required >> (text-input #:attributes '((class "field text fn") (size "8") )))) >> . => . first} >> (label "First")) >> (span >> ,{(to-string >> (required >> (text-input #:attributes '((class "field text ln") (size "14") )))) >> . => . last} >> (label "Last"))) >> >> instead of using input-string. >> >> Is there a way to pass in #:attribute to input-string? > > No, input-string was my original version that didn't have many hooks > and made big assumptions about how you want to use it. text-input is > more basic a building block. > >> >> 2. Another consequence of using Formlets with given CSS/JSs is that >> code gets rather long and >> polluted with lots of ((class "blah blah blah")) and #:attributes (...) >> At the end of the day, it makes me wonder if it's worth the effort >> doing it this way >> (https://github.com/racketeer/racketeering/blob/master/wufooing/emergency-contact.rkt). >> >> Maybe I am better off with just using templates, any thoughts/advice >> on this? > > You should define a formlet like > > (define (classy-input-string [classes ""] [size "8"]) > (to-string > (required > (text-input #:attributes `((class (format "field text ~a" > classes)) (size ,size) ))))) > > and use that instead. In general, a function/identifier exists to not > duplicate > code, so whenever you would otherwise duplicate code... make a > function, formlets are no different. > >> >> 3. Say I have a Formlet like this to be used in different places. >> >> (define name-formlet >> (formlet >> (div >> (label "First Name") >> ,{input-string . => . first} >> (label "Last Name") >> ,{input-string . => . last}) >> (list first last))) >> >> >> ...some where >> >> (formlet >> (fieldset >> (legend "Guy") >> ,{name-formlet . =+ . guy} >> ,{phone-formlet ... >> ... >> >> ... else where >> >> (formlet >> (fieldset >> (legend "Gal") >> ,{name-formlet . =+ . gal} >> ,{phone-formlet ... >> ... >> >> I want the label and input tags to come out without div tag and become >> children of fieldset tag so I end up with >> >> <fieldset> >> <legend> >> <label><input .... >> <label><input .... >> >> instead of >> >> <fieldset> >> <legend> >> <div> >> <label><input .... >> <label><input .... >> >> Is there a way to do this? It seems I cannot define like this: >> (define name-formlet >> (formlet >> (list-that-is-not-tag??? >> (label "First Name") >> ,{input-string . => . first} >> (label "Last Name") >> ,{input-string . => . last}) >> (list first last))) >> >> or like >> (define name-formlet >> (formlet >> ;things, with last one being the bound names... >> (label "First Name") >> ,{input-string . => . first} >> (label "Last Name") >> ,{input-string . => . last} >> (list first last) )) > > This is exactly why formlets are rendered as xexpr forests and why the > (#%# ...) form exists. You want... > > (define name-formlet > (formlet > (#%# > (label "First Name") > ,{input-string . => . first} > (label "Last Name") > ,{input-string . => . last}) > (list first last))) > > Jay > >> >> >> Regards, >> >> jGc >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users > > > > -- > Jay McCarthy <j...@cs.byu.edu> > Assistant Professor / Brigham Young University > http://faculty.cs.byu.edu/~jay > > "The glory of God is Intelligence" - D&C 93 ____________________ Racket Users list: http://lists.racket-lang.org/users