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.