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.


Reply via email to