On Mon, Dec 7, 2009 at 9:14 PM, Xuefeng Wu <ben...@gmail.com> wrote: > Hi David & Ross, > > Thank you for your help, > I understand RequestVar now, which muse be used in the same request. > > My case is that I have a tree and a separate button. > When use click the tree node, the separate button should know which node is > selected. >
Without understanding how def *doCompetenceB*(xhtml: NodeSeq,msg: String,competence: Competence): NodeSeq = { is called as part of the Ajax callback, I can't give you any advice. Sorry. > > Right now I replace the separate button when use click the tree node and it > worked. > I don't want to use session and I think it's better not replace the button. > But I don't have idea how to do. > > On Tue, Dec 8, 2009 at 12:49 PM, David Pollak < > feeder.of.the.be...@gmail.com> wrote: > >> >> >> On Mon, Dec 7, 2009 at 8:46 PM, Xuefeng Wu <ben...@gmail.com> wrote: >> >>> My current solution is that when user select a tree node, I replace the >>> add button dependence on the node. >> >> >> If you can create a very simple example of what you're trying to do, we >> can help you debug the actual, runnable code. >> >> >>> >>> >>> 2009/12/8 Xuefeng Wu <ben...@gmail.com> >>> >>> Hi Ross, >>>> >>>> Yes it's not in the same request. >>>> >>>> My case is: >>>> When user select a tree node, I want to store this nodeId and If user >>>> click a button to create a child node, I want to get the selected node. >>>> >>>> I use ModalDialog when user click the button to create now node. >>>> >>>> On Tue, Dec 8, 2009 at 11:50 AM, Ross Mellgren <dri...@gmail.com>wrote: >>>> >>>>> I'm sorry, I'm having trouble following your code, I think too much of >>>>> the surrounding code and templates is missing for me to reason about why >>>>> you >>>>> would have a problem. >>>>> >>>>> I set up a quick example app, so maybe the code from that will help >>>>> you. It is here: >>>>> >>>>> http://github.com/Dridus/test-rqvarlog >>>>> >>>>> If I understand you correctly, you're getting a log message like this >>>>> one: >>>>> WARN - RequestVar test.snippet.HelloWorld$myVar$_ was set but not read >>>>> >>>>> This message is from the code I posted: >>>>> >>>>> package test.snippet >>>>> >>>>> import _root_.scala.xml.NodeSeq >>>>> import _root_.net.liftweb.http.RequestVar >>>>> import _root_.net.liftweb.util.Helpers >>>>> import Helpers._ >>>>> >>>>> class HelloWorld { >>>>> object myVar extends RequestVar[Int](0) >>>>> >>>>> def howdy(in: NodeSeq): NodeSeq = Helpers.bind("b", in, "time" -> >>>>> (new _root_.java.util.Date).toString) >>>>> >>>>> def increment(in: NodeSeq): NodeSeq = { >>>>> myVar.set(myVar.is + 1) >>>>> <div>increment called</div> >>>>> } >>>>> >>>>> def show(in: NodeSeq): NodeSeq = <div>show called -- myVar.is { >>>>> myVar.is }</div> >>>>> } >>>>> >>>>> >>>>> <lift:surround with="default" at="content"> >>>>> <h2>Welcome to your project!</h2> >>>>> <p> >>>>> <lift:helloWorld.howdy> >>>>> <span>Welcome to test-rqvarlog at <b:time/></span> >>>>> </lift:helloWorld.howdy> >>>>> >>>>> <lift:HelloWorld.increment /> >>>>> <lift:HelloWorld.increment /> >>>>> <!-- <lift:HelloWorld.show /> --> >>>>> </p> >>>>> </lift:surround> >>>>> >>>>> If I uncomment the line with HelloWorld.show in the template, the log >>>>> message goes away because myVar.is is called. >>>>> >>>>> If you are still getting the message, then that should mean that you >>>>> are not calling myVar.is in the same request. >>>>> >>>>> HTH, >>>>> -Ross >>>>> >>>>> On Dec 7, 2009, at 10:28 PM, Xuefeng Wu wrote: >>>>> >>>>> My code : >>>>> >>>>> >>>>> object CompetenceMgr { >>>>> >>>>> Menu(Loc("Competence", List("competence", "index"), S.?("Competence"), >>>>> ifIsLoggedIn, >>>>> ... >>>>> Loc.Snippet("buildCompetenceDicRows", buildCompetenceDicRows), >>>>> Loc.Snippet("addCompetenceB", addCompetenceB), >>>>> .... >>>>> >>>>> private object *_categoryId *extends RequestVar[Long](0) >>>>> >>>>> //build a competenceDic table >>>>> def buildCompetenceDicRows(xhtml: NodeSeq): NodeSeq = { >>>>> ... ... >>>>> def *makeCategoryRow*(r: Category) = { >>>>> ..... >>>>> def *categoryNode*: NodeSeq = { >>>>> def categoryNodeLinkId = "categoryNodeLinkId-" + r.id >>>>> def selectCategoryNode: JsCmd = { >>>>> * //here: set the _categoryId, but didn't work* >>>>> _categoryId.set(r.id.is) >>>>> ... .. >>>>> } >>>>> <span id={categoryNodeLinkId} class='node_span'>{a(() => >>>>> selectCategoryNode, Text(r.title.is))}</span> >>>>> } >>>>> <tr ><td><span class="folder draggable droppable" >>>>> id={categoeryId}>{categoryNode}</span></td></tr> % ("id" -> nodeId) % >>>>> ("class" -> nodeClass) >>>>> } >>>>> def *buildCategoryRows*: NodeSeq = { >>>>> val resourceData = Category.categoriesTreeList >>>>> (empty /: resourceData)((l, r) => l ++ *makeCategoryRow*(r)) >>>>> } >>>>> *buildCategoryRows* >>>>> } >>>>> >>>>> //it's a button for create competence >>>>> def *addCompetenceB*(xhtml: NodeSeq): NodeSeq = >>>>> doCompetenceB(xhtml,"add Competence",null) >>>>> //a button for create or edit competence >>>>> def *doCompetenceB*(xhtml: NodeSeq,msg: String,competence: >>>>> Competence): NodeSeq = { >>>>> a(() => { >>>>> *//here I try to get the categoryId if it selected.* >>>>> val catId: Long = _categoryId.is >>>>> S.runTemplate(List("competence","_competence")). >>>>> map(ns => >>>>> ModalDialog(doCompetenceEditor(ns,catId,competence))) openOr >>>>> Alert("Couldn't find _competence template")}, >>>>> Text(msg),"class" -> "button" >>>>> ) >>>>> } >>>>> >>>>> >>>>> >>>>> >>>>> On Tue, Dec 8, 2009 at 11:02 AM, Ross Mellgren <dri...@gmail.com>wrote: >>>>> >>>>>> Well if you logically expected it to be read but it wasn't, it might >>>>>> indicate a bug to you or help in diagnosis. >>>>>> >>>>>> I'm not sure I understand your reply fully -- when you added myId.isdid >>>>>> the log message go away? If not, could you post your code? >>>>>> >>>>>> -Ross >>>>>> >>>>>> On Dec 7, 2009, at 9:39 PM, Xuefeng Wu wrote: >>>>>> >>>>>> I use myId.is but get nothing. >>>>>> I don't know what I could do with the information. >>>>>> >>>>>> On Tue, Dec 8, 2009 at 10:19 AM, Ross Mellgren <dri...@gmail.com>wrote: >>>>>> >>>>>>> I think that message is just informative, letting you know that you >>>>>>> don't seem to be using the request var fully (perhaps due to typo, or >>>>>>> code >>>>>>> refactoring that made it unused, or something.) >>>>>>> >>>>>>> I think it'll go away if you access the variable somewhere using >>>>>>> myId.is. >>>>>>> >>>>>>> -Ross >>>>>>> >>>>>>> On Dec 7, 2009, at 9:02 PM, Xuefeng Wu wrote: >>>>>>> >>>>>>> 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. >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> 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. >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> 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. >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> 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. >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> 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. >>>>> >>>>> >>>>> -- >>>>> 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. >>>>> >>>> >>>> >>>> >>>> -- >>>> Scala中文社区: http://groups.google.com/group/scalacn >>>> >>> >>> >>> >>> -- >>> 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<liftweb%2bunsubscr...@googlegroups.com> >>> . >>> For more options, visit this group at >>> http://groups.google.com/group/liftweb?hl=en. >>> >> >> >> >> -- >> 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<liftweb%2bunsubscr...@googlegroups.com> >> . >> For more options, visit this group at >> http://groups.google.com/group/liftweb?hl=en. >> > > > > -- > 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<liftweb%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/liftweb?hl=en. > -- 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=en.