I've subclassed JsonHandler:

abstract class MyJsonHandler extends JsonHandler {
  private def handlers: (JsonCall, JsCmd) =
S.buildJsonFunc(this.apply)
  override def call: JsonCall = handlers._1
  override def jsCmd: JsCmd = handlers._2
}

I think that should do what you're suggesting. My handler object now
subclasses MyJsonHandler. The problem now, is that the form submission
results in creating a new snippet. Because of the captured val is
calculated from a request param and this param isn't available any
more (it's just there in the request that sets up the page) it
crashes.

The code in short:

class MySnippet {
  val value = S.param("param").open_! // the actual code is different,
just to show that value relies on a req param

  def head = ...
  def form(xhtml: NodeSeq): NodeSeq = jsonForm(jsonHandler, xhtml)

  object jsonHandler extends MyJsonHandler {
    def apply(in: Any): JsCmd = {
      // access value
    }
  }
}

- Chris


On 11 Feb., 00:50, David Pollak <feeder.of.the.be...@gmail.com> wrote:
> On Wed, Feb 10, 2010 at 2:47 PM, ced <docpom...@googlemail.com> wrote:
> > Hi everybody,
>
> > I'm having a JsonHandler object inside a snippet and I want to access
> > some vals from to enclosing snippet. But unfortunately this doesn't
> > work, because it seems that there is just one single instance per
> > session and class name maintained by Lift. Having a fresh handler per
> > snippet would let me easily capture some state from the enclosing
> > snippet instance, but as the same JsonHandler gets reused in setting
> > up the Javascript for callback, this is not working.
>
> > Is there a way to remove the registered handler from the session?
> > LiftSession.set and unset aren't accessible for the outside world. Or
> > to enforce to have a new handler everytime?
>
> > I'm using Lift 1.1-M8.
>
> If you use this:
>
> val (call: JsonCall, jsCmd: JsCmd) = S.buildJsonFunc{
>   case ... => ...
>
> }
>
> You'll get a new JSON Handler, closed over the variables in your snippet for
> each new instance of your snippet.
>
> Is that what you're looking for?
>
> > Thanks for any ideas,
> > Chris
>
> > --
> > 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=en.
>
> --
> 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 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