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.


Reply via email to