value%不是scala.xml.NodeSeq的成员

时间:2011-02-14 15:37:11

标签: scala lift

我正在尝试使用Lift处理一些CSS Selector Transforms示例。我正在尝试这种转变:

  
      
  • NodeSeq =&gt; NodeSeq - 一个转换节点的函数(是的,它可以是一个CssBindFunc):"#name" #> ((n: NodeSeq) => n % ("class" -> "dog")) // <span id="name"/> -> <span id="name" class="dog"/>
  •   

现在正在给我带来麻烦的是%。当我尝试编写这样的代码时,我收到错误value % is not a member of scala.xml.NodeSeq。是否有导入或我遗漏的东西?

这是我的代码段:

import scala.xml._
import net.liftweb.util.Helpers._

import model.User

class Users {
  def show = {
    ".userName" #> "name replaced" &
    ".userEmail" #> "email replaced" &
    ".changePassword" #> ((n: NodeSeq) => n % ("href" -> "changePassword"))
  }
}

2 个答案:

答案 0 :(得分:5)

只有Elem包含%方法。 NodeSeq不是Elem,而是Node的集合,可能是也可能不是Elem。而且我不确定Lift的助手是否包含创建MetaData的暗示,但如果没有,你需要像

这样的东西
myNodeSeq map {
  case e: Elem => e % new UnprefixedAttribute("href","changePassword",xml.Null)
  case x => x
}

涵盖一般情况。

答案 1 :(得分:0)

这是做你想做的事的方法。它几乎相当,但不会引起任何错误。

import scala.xml._
import net.liftweb.util.Helpers._
scala> val res1 = "#name" #> ((n:NodeSeq) => ("* [class]" #> "dog")(n))
res1: net.liftweb.util.CssSel = CssBind(Full(#name), Full(IdSelector(name,Empty)))
scala> res1(<span id="name"/>)
res2: scala.xml.NodeSeq = NodeSeq(<span id="name" class="dog"></span>)