SCALA Lift - AJAX формирует несколько значений - PullRequest
2 голосов
/ 24 октября 2011

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

<form class="lift:form.ajax">
    <input type="hidden" class="lift:StreamIn" id="path" value="PATH" />
    <input type="submit" value="" />
</form>

Что входит в:

object StreamIn {

    def render = SHtml.onSubmit(path => {

        StreamServer ! path

    })

}

case class StreamItem(user: String, path: String, level: String, room: String)

object StreamServer extends LiftActor with ListenerManager {

    private var streams: List[StreamItem] = Nil

    def createUpdate = streams

    override def lowPriority = {

        case stream: String if stream.length > 0 =>

            streams :+= StreamItem("James", stream, "_1", "demo-room");
            updateListeners()

    }

}

То, что я ищу, - это способ передачи нескольких значений в StreamServer с более чем одним входом.

Таким образом, вместо статических строковых значений «Джеймс», «_1» и «демо-комната» они будут переданы из формы.

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

1 Ответ

3 голосов
/ 25 октября 2011

Можно ли иметь несколько полей ввода в вашей форме ajax? Если да, то как насчет:

<form class="lift:form.ajax">
  <div class="lift:StreamIn">
    <input type="text" name="path" />
    <input type="text" name="user" />
    <input type="text" name="level" />
    <input type="text" name="room" />
    <input type="hidden" name="hidden" />
  </div>
</form>

Обновлен:

object StreamIn {
  case class StreamItem(user: String, path: String, level: String, room: String)
  def render = {
    var path= ""
    var user= ""
    var level= ""
    var room= ""
      def process(): JsCmd= {
        val message= StreamItem(user, path, level, room)
        StreamServer ! message
      }

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

  }
}

И изменить низкий приоритет для:

override def lowPriority = {
  case StreamItem(userIn, pathIn, levelIn, roomIn) => {
    streams :+= StreamItem(userIn, pathIn, levelIn, roomIn);
    updateListeners()
  }

}

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

Вы можете больше читать о формах ajax в Просто поднять книгу

Надеюсь, это поможет

...