Scala Lift - List() как дочернее значение JsObj

У меня есть следующая модель:

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

)

Он работает нормально, но, очевидно, не печатает весь массив объектов.

Заранее спасибо за любую помощь, высоко ценится:)

2 ответа

Решение

Глядя на 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 для каждого элемента.

Другие вопросы по тегам