Glenn,

All functions are bound to the current state in the scope that the function
was created.  There's no need to do weird RequestVar things with Hidden
fields or anything else.  If you've got a function passed to SHtml.text,
submit, etc. that function closes over its local scope: it captures all the
variables it refers to.

So:

def mySnippet = {
  val myInstance = MyTable.find(whatever)

  SHtml.ajaxCheckbox(..., bool => {myInstance.boolField(bool).save; Noop})
}

In the above code, you've captured the instance in the val myInstance...
that's kept around for the lifespan of the function that you passed to
ajaxCheckbox.

Thanks,

David

On Fri, Nov 20, 2009 at 9:45 AM, glenn <gl...@exmbly.com> wrote:

> I've been following this thread as lately I'm having difficulty with
> an ajax-submitted
> request in my app. Here's the scenario (There's no simple way to
> describe this, so bear with me):
>
> I create a JQuery tree of my data (Mapper object with just an item
> name and a parent Mapper object as it's fields) as follows:
>
> def buildTree(in:NodeSeq):NodeSeq = {
>
>   object MyJqLoad {
>     def apply(content: JsExp) = new JsExp with JQueryRight with
> JQueryLeft {
>       def toJsCmd = JqId("json_result").toJsCmd + ".load(" +
> content.toJsCmd + JsRaw("""+this.id""") + ")"
>     }
>   }
>
>   val host = "http://"; + S.hostName
>   val link = host + ":8080" + S.contextPath + "/api/json/" +
> dbTableName.toLowerCase + "/"
>
>   val func = AnonFunc( MyJqLoad(link))
>
>   TreeView("tree", JsObj(("persist", "location"), ("toggle",  func)),
> loadTree, loadNode)
>  }
>
>  The functions, loadTree and loadNode, are used to asynchronously
> build the tree of item names from the Mapper instances.
>  The link val creates a URL, for example, http://localhost:8080/api/json/
> <dbTableName>/,
> where dbTableName is just the Mapper object name.
>
> On the client, the user clicks on a tree item, which, as you can see
> from the above code, submits the Mapper id selected to the server,
> which then
> pulls the Mapper.toForm html from the Mapper instance and returns it
> to the client at <div id="json_result"/>, which is in my template.
> This all works great.
>
> Where this all breaks down, is in submitting the returned
> Mapper.toForm back to the server when I click on the "Save" button,
> because no Mapper instance
> exists at that point in the request or session for the save button to
> act on.
>
> Somewhere, I'm thinking I have to modify the Mapper.toForm html so the
> submit button runs another JavaScript function on the client to return
> the Mapper id
> to the server for processing. But I haven't yet been able to do this.
> One of the problems is that I don't even have an id on the client
> (none is returned with Mapper.toForm
> html) to work with. And, it seems to me that to make this scenario
> work, I'm forced to become a JavaScript guru and work outside of Lift.
> In other words, if there isn't
> a mechanism in Lift to handle this situation directly, there should
> be.
>
> One of the things I've tried is to add a hidden form field to the
> Mapper.toForm html,
>
> SHtml.hidden(() => itemIdVar(id.toString)),
>
> where itemIdVar extends RequestVar[String].
>
> But I couldn't make that work either. The hidden form field is suppose
> to run the ()=Any function, and it may do that, but not in the correct
> sequence to do any good
> when the form is submitted.
>
> Glenn
>
> On Nov 19, 11:35 pm, Jeppe Nejsum Madsen <je...@ingolfs.dk> wrote:
> > Chris Lewis <burningodzi...@gmail.com> writes:
> > > Thanks for the feedback Jeppe. I can't completely infer the context of
> > > your example,
> >
> > Seems to happen a lot to me lately. :-) This was just a quick paste from
> > our codebase....
> >
> > > but I get the idea (and I hadn't known about TemplateFinder). Here's
> > > what I've hacked together so far.
> >
> > /Jeppe
>
> --
>
> 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<liftweb%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/liftweb?hl=.
>
>
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics

--

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=.


Reply via email to