My current solution is that when user select a tree node, I replace the add button dependence on the node.
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.is did >>> 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. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.