SCALA Lift — отсутствует тип параметра для расширенной функции

#ajax #scala #lift

#ajax #scala #лифт

Вопрос:

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

 <form class="lift:form.ajax">

    <div class="lift:StreamInput">
        <input type="hidden" name="user" value="USER" />
        <input type="hidden" name="room" value="ROOM" />
        <input type="hidden" name="path" value="PATH" />
        <input type="hidden" name="level" value="LEVEL" />
    </div>

    <input type="submit" value="" />

</form>
  

Который переходит в:

 object StreamInput {

    case class StreamItem(

        user: String, 
        path: String, 
        level: String, 
        room: String

    )

    def render = {

        var user = ""
        var path = ""
        var level = ""
        var room = ""

        def process(): JsCmd = {

            var message = StreamItem(user, path, level, room)
            StreamServer ! message

        }

        "name=user" #> SHtml.onSubmit(user => user = _)
        "name=path" #> SHtml.onSubmit(path => path = _)
        "name=level" #> SHtml.onSubmit(level => level = _)
        "name=room" #> (SHtml.onSubmit(room => room = _)    SHtml.hidden(process))

    }

}
  

При компиляции я получаю следующие ошибки:

 "Missing parameter type for expanded function ((x$1) => user = x$1)"
"name=user" #> SHtml.onSubmit(user => user = _)
                                             ^
"Missing parameter type for expanded function ((x$2) => user = x$2)"
"name=path" #> SHtml.onSubmit(path => path = _)
                                             ^
"Missing parameter type for expanded function ((x$3) => user = x$3)"
"name=level" #> SHtml.onSubmit(level => level = _)
                                                ^
"Missing parameter type for expanded function ((x$4) => user = x$4)"
"name=room" #> SHtml.onSubmit(room => room = _)
                                             ^
  

Я уже некоторое время гуглю и, похоже, не могу найти объяснения, которое соответствовало бы моему конкретному сценарию.

Не уверен, чего мне не хватает, любая помощь очень ценится, заранее спасибо 🙂

Ответ №1:

SHtml.onSubmit выполняется обратный (String) ⇒ Any вызов . Это String вновь отправленное значение поля. В вашем случае вы хотите предоставить метод установки, который изменит ваш var s на это новое значение. Измените аргумент на

 SHtml.onSubmit(user = _)
  

или расширенный

 SHtml.onSubmit(text => user = text)
  

(Документация)

Комментарии:

1. Спасибо за помощь, ошибки теперь исчезли, но я получаю последнюю ошибку, связанную с этим битом: » SHtml.hidden(process))», » не является членом (scala.xml.NodeSeq) => scala.xml.NodeSeq»

2. Не уверен, что вам следует использовать onSubmit then. Взгляните на simply.liftweb.net/index-4.8.html#toc-Section-4.8 где SHtml.text используется. Также не забудьте объединить преобразования CSS с amp; .