簡體   English   中英

Scala Lift-List()作為JsObj子值

[英]Scala Lift - List() as JsObj child value

我有以下模型:

class Chat private() extends MongoRecord[Chat] with ObjectIdPk[Chat] {

    def meta = Chat

    object room extends StringField(this, 50) 
    object user extends StringField(this, 50)
    object name extends StringField(this, 50)
    object level extends StringField(this, 50)
    object target extends StringField(this, 50)
    object value extends StringField(this, 50)
    object time extends StringField(this, 50)
    object fulltime extends StringField(this, 50)
    object handle extends StringField(this, 50)

}

object Chat extends Chat with MongoMetaRecord[Chat] {

    override def collectionName = "chat"

}

我加載使用:

var chat_model = Chat.findAll(

    ("room" -> "testroom"),
    ("time" -> 1)

).map(_.asJValue)

我使用以下代碼片段呈現的代碼:

def render = {

    <script type="text/javascript">

        var DATA = {JsObj(

            ("CHAT", chat_model)

        )}

    </script>

}

產生編譯錯誤:

[error] overloaded method value apply with alternatives:
[error]   (in: net.liftweb.http.js.JsExp*)net.liftweb.http.js.JE.JsArray <and>
[error]   (in: List[net.liftweb.http.js.JsExp])net.liftweb.http.js.JE.JsArray
[error]  cannot be applied to (List[net.liftweb.json.JsonAST.JObject])
[error]                                 ("CHAT", JsArray(chat_model)

如果我僅傳遞chat_model中的第一項,例如:

JsObj(

    ("CHAT", chat_model(0))

)

它工作正常,但顯然不會打印整個對象數組。

在此先感謝您的幫助,非常感謝:)

查看JsObject.apply方法,它采用(String, JsExp)* 您正在給它(String, List[JObject]) 您需要將該列表轉換為JsExp

您可以將列表包裝在JArray ,該列表應隱式轉換為JsExp。

import net.liftweb.json.JsonAST._

JsObj(("CHAT", JArray(chat_model)))

在我看來,在您的代碼范圍內,存在從JObject到JsExp的隱式轉換,但是不會將List [JObject]轉換為List [JsExp]。 嘗試將地圖更改為以下內容:

map(_.asJValue : JsExp)

我認為這足以觸發每個元素到JsExp的轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM