On Fri, Nov 20, 2009 at 10:14 AM, glenn <[email protected]> wrote:

> David,
>
> That's what I thought. All I needed to do was create the Mapper.toForm
> like so:
>
> item.toForm(Full("Save"), { _.save })
>
> and the item would be saved on submit. But it doesn't work in my case.
>

Please put together a complete runnable example of it not working for you
and we'll debug it.


>
> Glenn
>
>
> On Nov 20, 10:05 am, David Pollak <[email protected]>
> wrote:
> > 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 <[email protected]> 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 <[email protected]> wrote:
> > > > Chris Lewis <[email protected]> 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 [email protected].
> > > To unsubscribe from this group, send email to
> > > [email protected]<liftweb%[email protected]>
> <liftweb%[email protected]<liftweb%[email protected]>
> >
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/liftweb?hl=.
> >
> > --
> > Lift, the simply functional web frameworkhttp://liftweb.net
> > Beginning Scalahttp://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 [email protected].
> To unsubscribe from this group, send email to
> [email protected]<liftweb%[email protected]>
> .
> 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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=.


Reply via email to