2011-06-17 9 views
1

だから、私はmyUserであるカスタムオブジェクトを持っています。Scala - リフト - バインド用のカスタムボックスオブジェクトをマップしますか?

MYUSERは次のようになります。

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

私はページに来て、これらのユーザーのリストを持って、私は、各ユーザーの詳細を表示するためのリンクを作りました。ユーザーをクリックすると、リクエストされたボックス化されたオブジェクトが埋め込まれます。次に、このユーザー情報を表示するために詳細ページに移動します。なぜ私はこのオブジェクトの地図からバインドできないのですか?ここではいくつかのコード...

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})} 
} 

面白いです事は、私はそれをこのようにすることができ、それは動作しますが、1行でそれを行う方法がなければなりませんか?

これは動作します...しかし、それは面倒だ:

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

これは、selectedUserが存在しない場合は空のNodeSeqを返し、それ以外の場合はバインドの結果を返します。

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

関連する問題