On Fri, Nov 20, 2009 at 8:17 AM, Alex Black <a...@alexblack.ca> wrote:
> Thanks Ross, that helps a lot. > > As a Lift newbie, I'm curious, would it be possible (in a future > version of list) to re-use snippet instances for all calls during an > HTTP request? Then people could share data between snippet methods > (within a single snippet) by just writing regular member variables. > We made this change for Lift 1.1. So, if you're using 1.1, the same instance of a snippet should be used for a given HTTP request. > > I'd imagine lift could even generate a requestVar representing each > snippet for the developers, allowing snippets in a given HTTP request > to access each other easily. > I don't think this is technically possible within the bounds of the type system. > > On Nov 20, 11:09 am, Ross Mellgren <dri...@gmail.com> wrote: > > RequestVar is the standard way of doing this. For example > > > > object MySharedInformation { > > object myData extends RequestVar[List[Thing]](loadThings) > > // ^^^^^^^^^^^ ^^^^^^^^^^ > > // Type of thing to store How to initialize > > variable first time it's accessed > > > > private def loadThings: List[Thing] = ... > > > > } > > > > class Snippet1 { > > import MySharedInformation.myData > > def render(ns: NodeSeq): NodeSeq = { > > myData.is.map(thing => { ... }) > > } > > > > } > > > > class Snippet2 { > > import MySharedInformation.myData > > ... > > > > } > > > > The lifetime of the value is during the current request processing and > > any AJAX calls related to it. > > > > If you really want to initialize it in a snippet, then use a Box with > > a RequestVar, like this: > > > > object MySharedInformation { > > object myData extends RequestVar[Box[List[Thing]]](Empty) > > > > } > > > > class LoaderSnippet { > > import MySharedInformation.myData > > def render(ns: NodeSeq): NodeSeq = { > > myData.set(Full(...)) > > } > > > > } > > > > class ReaderSnippet { > > import MySharedInformation.myData > > def render(ns: NodeSeq): NodeSeq = { > > // If the data has not been loaded, default to an empty list > > val data = myData.is.openOr(Nil) > > ... > > } > > > > } > > > > class OtherReaderSnippet { > > import MySharedInformation.myData > > def render(ns: NodeSeq): NodeSeq = { > > // Do two entirely different things if the data has versus > > has not been loaded > > myData.is match { > > case Full(data) => // do something when the data has been > > loaded > > case _ => // do something when the data has not been loaded > > } > > } > > > > } > > > > HTH, > > -Ross > > > > On Nov 20, 2009, at 10:59 AM, Alex Black wrote: > > > > > I've got a template page, say foobar.html, that makes a number of > > > calls to functions in a snippet, e.g. mysnippet.foo1, mysnippet.foo2, > > > mysnippet.foo3. > > > > > I'd like to do some initial work in foo1, e.g. retrieve some data and > > > do some work on it, then in foo2 and foo3 display parts of that data. > > > > > Whats the easiest way to do this? I think I misunderstood the lift > > > book: > > > > > "That means that for each request, Lift creates a new instance of the > > > snippet class to execute. Any changes you make to instance variables > > > will be discarded after the request is processed." > > > > > I thought this meant that for a given HTTP request, there would be one > > > (and only one) instance of my snippet, so I could call several of its > > > methods and they could all access the snippet's member variables, > > > which would then be discarded at the end of the request. > > > > > Am I going about this wrong? should I only have one snippet function > > > per template? > > > > > Thx > > > > > - Alex > > > > > -- > > > > > 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 athttp:// > groups.google.com/group/liftweb?hl= > > > . > > -- > > 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=.