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].
For more options, visit this group at
http://groups.google.com/group/liftweb?hl=.