Hi , When I use RequestVar get the message: RequestVar ....... was set but not read
My code like this: object MyMgr { ... Loc.Snippet("myFoo",myFoo) ... object myId extends RequestVar[Long](0) def myFoo(xhtml: NodeSeq): NodeSeq = { .... def selectNode = { myId .set(vId) } .... bind("",xhtml, "node"->a(() => selectNode, Text(nodeName)) ) } } the RequestVar must be used at Class? On Sat, Nov 21, 2009 at 12: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 at > http://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=. > > > -- Scala中文社区: http://groups.google.com/group/scalacn -- 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.