Thanks for responding Marius.  You're right, my doSearch method
doesn't need the msg parameter -- that was just an artifact of
transforming an example (removed now).  As far as my specific issue, I
guess you're saying the best solution is for the framework to add
overload def -%>(in: NodeSeq => NodeSeq) congruent with -> -- should I
file a feature request?  As you said, Group(FocusOnLoad...) doesn't
compile either because it returns a Node, not the currently required
Element.  Did I misunderstand?  In the short term how would you solve
this ?

Thanks,
- Luke

On Mar 6, 1:39 am, Marius <marius.dan...@gmail.com> wrote:
> On 22 feb., 04:12, Luke  Nezda <lne...@gmail.com> wrote:
>
>
>
> > Hello,
>
> > I am new to Scala and Lift.  I am having a problem using 2 features
> > together which seem to work fine individually.  Here's a simplified
> > piece of the code:
>
> > class Ajax {
> >   def someResult(q:String) = <span>some results for query {q}...</
> > span>
> >   // searchField closure
> >   def searchField(xhtml: NodeSeq): NodeSeq = {
> >     // build up an ajax text box
> >     def doSearch(msg: NodeSeq) = {
> >       // doesn't compile with bind: "searchBox" -%> doSearch _
> >       FocusOnLoad(SHtml.ajaxText("", q => SetHtml("resultz",
> > someResult(q))))
> >       // compiles with bind: "searchBox" -%> doSearch _
> >       // SHtml.ajaxText("", q => SetHtml("resultz", someResult(q)))
> >     }
> >     // bind the view to the functionality
> >     bind("ajax", xhtml,
> >          "searchBox" -> doSearch _
> >          // doesn't compile if doSearch returns result of FocusOnLoad
> >          //"searchBox" -%> doSearch _
> >          )
> >   }
>
> > }
>
> > and the template invocation:
>
> > <lift:surround with="default" at="content">
> >   <lift:Ajax.searchField id_msgs="messages">
> >       <ajax:searchBox class="text" type="search" tabindex="1" />
> >       <hr class="space"/>
> >       <div id="resultz"></div>
> >       <div id="messages"></div>
> >   </lift:Ajax.searchField>
> > </lift:surround>
>
> > My goal is an Ajax-enabled text input that gets focus when the page
> > loads and has various attributes of the input element set.  I realize
> > I can use the SHtml.ajaxText variant that takes attribute-value pairs,
> > as in:
>
> >   FocusOnLoad(SHtml.ajaxText("", q => SetHtml("resultz",
> > Yawni.query(q)), ("class", "text"), ("type", "search"), ("tabindex",
> > "1")))
>
> > but I'm trying to keep the various element attributes in the template.
>
> > When I try to bind with:
> >   "searchBox" -%> doSearch _
> > instead of:
> >   "searchBox" -> doSearch _
>
> > I get the following compile error:
>
> > snippet/Ajax.scala:109: error: overloaded method value -%> with
> > alternatives ((scala.xml.NodeSeq) =>
> > scala.xml.Elem)net.liftweb.util.Helpers.FuncBindParam <and>
> > (Option[scala.xml.Elem])net.liftweb.util.Helpers.FuncBindParam <and>
> > (net.liftweb.common.Box[scala.xml.Elem])net.liftweb.util.Helpers.FuncBindPa 
> > ram
> > <and> (scala.xml.Elem)net.liftweb.util.Helpers.FuncBindParam cannot be
> > applied to ((scala.xml.NodeSeq) => scala.xml.NodeSeq)
> >          "searchBox" -%> doSearch _
> >                      ^
> > one error found
>
> Why your doSearch function takes a msg parameter? ... it doesn't seam
> to use it.
>
>  doSearch _ is a partially applied function and acts as a (NodeSeq) =>
> NodeSeq however -%> has only a definition like:
>
> def -%>(in: NodeSeq => Elem)
>
> while  -> also has
>
> def ->(in: NodeSeq => NodeSeq)
>
> which is why you get the compile error. We should add the same
> definition for NodeSeq => NodeSeq
>
> You can simply say:
>
>  "searchBox" -%> doSearch
>
> and have def doSearch: NodeSeq = ...
>
> FocusOnLoad returns a NodeSeq because it returns a sequence of nodes
> which conceptually cannot be converted to an elem. You could try to
> have a Group(FocusOnLoad ...) ... but Group is a Node not an Elem.
>
>
>
> > Between all the bind() and ->()/-%>() overloads and my general Scala /
> > Lift ignorance, I can't understand what the right way to resolve this
> > is.  I think it has something to do with FocusOnLoad returning a
> > NodeSeq (<input/><script/>) vs. an Element, but I don't know where to
> > go from here...
>
> > Thanks in advance,
> > - Luke

-- 
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to lift...@googlegroups.com.
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en.

Reply via email to