Marius,
All working great now. Thanks for the quick response and fix.
Chris

On Dec 29 2009, 1:35 am, Marius <marius.dan...@gmail.com> wrote:
> This was a non trivial hustle to find the cause:) ... See each Lift
> function is bound to an owner. The owner can be the pageId (generated
> by Lift) or the Comet ID. In this case since the function is bound
> from Comet the owner is the Comet ID. Therefore when clicking on "this
> doesn't (via comet actor)" the function execution is forwarded to the
> CometActor (synchronously) in order to send down to the client
> potential other messages that the CometActor has at that point in
> time. The problem was that the S context was incorrectly initialized
> when this occurred.
>
> I opened defecthttp://github.com/dpp/liftweb/issues/#issue/264...
> and I'm posting the fix on the review board in a few minutes.
>
> Br's,
> Marius
>
> On Dec 27, 4:42 pm, Marius <marius.dan...@gmail.com> wrote:
>
> > AH sorry ... I didn't put your exac same snippets because I have a
> > demo app already there and I only had to do mino change to try your
> > scenario. Here is what I have now:
>
> > The snippet:
>
> > class Hello {
>
> >   def ajaxCometLink(xhtml: NodeSeq): NodeSeq = {
> >     bind("st", xhtml,
> >      "something" -> SHtml.a(() => {
> >      println("The damn one clicked")
>
> >       SetHtml("time", <b>Clicked</b>)
> >     }, Text("Another damn one")))
> >   }
>
> > }
>
> > and the Comet render:
>
> >   def render = {
>
> >     val res: NodeSeq = bind("time" -> timeSpan) ++
> >      <lift:Hello.ajaxCometLink><st:something/></
> > lift:Hello.ajaxCometLink>
> >     res
> >   }
>
> > It still works for me.
>
> > Could you please send a minimalistic Lift application as a zip file
> > (including your Boot, pom.xml, etc) where you reproduce this?
> > Something that I could just run it and see the effect? I could look on
> > it tomorrow.
>
> > Br's,
> > Marius
>
> > On Dec 27, 4:18 pm,ChrisX<xtopher....@gmail.com> wrote:
>
> > > Hi Marius,
> > > Thanks for your response. The issue occurs when using inline template
> > > xhtml as the content for SetHtml, which itself is the callback
> > > function for an ajax generator (I do this for reuse of ajax rendered
> > > elements that are accessible from different parts of the same page,
> > > and are sometimes several generated ajax callback levels deep, e.g.
> > > cometactor renders ajax element that renders another ajax element,
> > > etc.), as I have illustrated in the example - namely with:
>
> > > def render = a(()=> { SetHtml("whatever",
> > > <lift:TS.stuff2><st:something/></lift:TS.stuff2>) }, Text("this
> > > doesn't (via comet actor)"))
>
> > > The rest of the code in my example supports this as a complete
> > > runnable example, and also illustrates that rendering the same code
> > > from a snippet (vs a CometActor), works.
>
> > > Regards,
> > > Chris
>
> > > On Dec 27, 8:26 pm, Marius <marius.dan...@gmail.com> wrote:
>
> > > > Hmm that's weird. I have the master sources and a CometActor with a
> > > > render like:
>
> > > >   def render = {
>
> > > >     val link: NodeSeq = SHtml.a(()=> {
> > > >       println("Link clicked")
>
> > > >       SetHtml("time", <b>Clicked</b>)
> > > >     }, Text("this doesn't (via comet actor)"))
>
> > > >     val res: NodeSeq = bind("time" -> timeSpan) ++ link
> > > >     res
> > > >   }
>
> > > > and the Ajax link works just fine for me.
>
> > > > Br's,
> > > > Marius
>
> > > > On Dec 27, 7:36 am,ChrisX<xtopher....@gmail.com> wrote:
>
> > > > > Hi guys,
>
> > > > > I've recently migrated some code which leverages ajax and comet quite
> > > > > heavily, from 1.1-M4 to 1.1-M8 and have found that the function
> > > > > binding for a rendered ajax element, bound to a template which is
> > > > > itself the target of another ajax element, rendered via a CometActor
> > > > > (a mouthful I know) - no longer works. Rendering the same ajax element
> > > > > via a template works, and previously worked via a CometActor in 1.1-
> > > > > M4. The javascript callback code (and it's associated GUID) is
> > > > > generated, and the ajax_request successfully hits jetty, but I'm
> > > > > assuming something related to the guid-function mapping is not
> > > > > occurring, as the function isn't invoked.
>
> > > > > I've distilled the problem to an example below:
>
> > > > > Template:
> > > > > <lift:surround with="default" at="content">
> > > > >         <lift:TS.stuff />
> > > > >         <lift:comet type="MyActor" />
> > > > >         <div id="whatever" />
> > > > > </lift:surround>
>
> > > > > Snippet:
> > > > > class TS {
> > > > >   def stuff(in: NodeSeq): NodeSeq = a(()=> { SetHtml("whatever",
> > > > > <lift:TS.stuff2><st:something/></lift:TS.stuff2>) }, Text("this works
> > > > > (via snippet)"))
> > > > >   def stuff2(in: NodeSeq): NodeSeq = bind("st", in, "something" -> a
> > > > > (() => {println("clicked"); Noop}, Text("click me")))
>
> > > > > }
>
> > > > > CometActor:
> > > > > class MyActor extends CometActor {
> > > > >         //def render = SetHtml("whatever", 
> > > > > <lift:TS.stuff2><st:something/></
> > > > > lift:TS.stuff2>) // works
> > > > >         def render = a(()=> { SetHtml("whatever",
> > > > > <lift:TS.stuff2><st:something/></lift:TS.stuff2>) }, Text("this
> > > > > doesn't (via comet actor)"))
>
> > > > > }
>
> > > > > Can you give an indication of whether this change since M4 is
> > > > > intentional or if it will be working in future?
>
> > > > > Cheers,
>
> > > > > 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.
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en.


Reply via email to