Scala Lift - List () как дочернее значение JsObj - PullRequest
0 голосов
/ 14 марта 2012

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

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 ]

1 голос
/ 14 марта 2012

Глядя на метод JsObject.apply, он принимает параметр (String, JsExp)*. Вы даете это (String, List[JObject]). Вам нужно преобразовать этот список в JsExp.

Вы можете заключить список в JArray, который должен неявно преобразовать в JsExp.

import net.liftweb.json.JsonAST._

JsObj(("CHAT", JArray(chat_model)))
0 голосов
/ 14 марта 2012

Мне кажется, что в рамках вашего кода есть неявное преобразование из JObject в JsExp, но это не приведет к преобразованию List [JObject] в List [JsExp]. Попробуйте изменить карту на что-то вроде:

map(_.asJValue : JsExp)

Я думаю, этого должно быть достаточно для запуска преобразования в JsExp для каждого элемента.

...