2011-06-17 35 views
1

好的,所以我有一个myUser自定义对象。斯卡拉 - 电梯 - 映射一个自定义盒装对象绑定?

MYUSER看起来是这样的:

username:String = "" 
firstname:String = "" 
lastname:String = "" 

我有进入一个页面,这些用户的列表,我做了一个链接,查看各个用户的详细信息。当你点击一个用户时,它将填充我作为请求var的盒装对象,然后直接到详细信息页面查看此用户信息。为什么我不能从这个对象上的地图绑定?下面是一些代码...

private object selectedUser extends RequestVar[Box[myUser]](Empty) 

def getusers(html: NodeSeq):NodeSeq = { 

    //This gets me a list of 10 users that are "myUser" objects 
    val userList = User.getUsers(10) 

    userList.flatMap{user => bind("user", html, 
     "username" -> SHtml.link("/%2Fadmin%2Fdetail",() => selectedUser(Full(user)), Text(user.username)), 
     "firstname" -> {user.firstname}, 
     "lastname" -> {user.lastname}, 
     "lastloggedin" -> {user.lastloggedin})} 
} 

现在,当我在用户详细信息页面时,我想绘制出我写的selectedUser对象....但出于某种原因,我不能让它的工作,它给我这个错误:

类型不匹配;发现: net.liftweb.common.Box [scala.xml.NodeSeq] 要求:scala.xml.NodeSeq

这里是一个真实给我这个错误代码:

def userdetail(html: NodeSeq):NodeSeq = { 
    selectedUser.is.map{user => bind("user", html, 
     "username" -> {user.username}, 
     "firstname" -> {user.firstname}, 
     "lastname" -> {user.lastname}, 
     "lastloggedin" -> {user.lastloggedin})} 
} 

有趣事情是,我可以这样做,它会起作用,但是必须有一种方法可以在一条线上完成吗?

这工作...但它很麻烦:

def userdetail(html: NodeSeq):NodeSeq = { 

    var username = "" 
    var firstname = "" 
    var lastname = "" 
    var lastloggedin = "" 

    bind("user", html, 
     "username" -> {username}, 
     "firstname" -> {firstname}, 
     "lastname" -> {lastname}, 
     "lastloggedin" -> {lastloggedin}) 
} 

是否有人可以告诉我小东西我缺少在这里吗?我希望我能够清楚地解释自己。

谢谢!

回答

2

这会给你一个空的NodeSeq iff没有selectedUser和绑定的结果,否则。

def userdetail(html: NodeSeq):NodeSeq = { 
    selectedUser.is.toList.flatMap{user => bind("user", html, 
     "username" -> {user.username}, 
     "firstname" -> {user.firstname}, 
     "lastname" -> {user.lastname}, 
     "lastloggedin" -> {user.lastloggedin})} 
} 
+0

就是这样,我知道这是我想念的东西。你真棒! :) –

+0

是的,'aList.flatMap(item => bind(...))'是关键! – pr1001