【问题标题】:SCALA Lift - AJAX form multiple valuesSCALA Lift - AJAX 形成多个值
【发布时间】:2011-10-24 16:59:29
【问题描述】:

我有以下表格:

<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 的方法。

因此,它们将从表单中传递,而不是静态字符串值“James”、“_1”和“demo-room”。

提前感谢您的帮助,非常感谢:)

【问题讨论】:

    标签: ajax scala lift


    【解决方案1】:

    在您的 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 访问它们。

    您可以在Simply Lift Book 上阅读更多关于 ajax 表单的内容

    希望对你有帮助

    【讨论】:

    • 感谢您的帮助,现在肯定在正确的轨道上。我已经完成了您提到的上述更改,但是在编译时出现以下错误:“缺少扩展函数的参数类型”这发生在每一行:“name=path”#> SHtml.onSubmit(path => path= _ ) 等
    • 应该是“‘扩展’函数缺少参数类型”
    • 好的,我更新了 StreamIn sn-p 对象以消除编译器错误并编辑了 html 以添加隐藏字段
    • 感谢您的帮助,为什么我们需要隐藏输入?我的目标是隐藏表单值,例如路径、房间、级别、用户并通过提交按钮提交表单。
    • 如果是普通表单,则不需要额外的隐藏字段,如果您使用ajax表单,jQuery不会将提交按钮发送到lift服务器,所以对于表单实际工作你需要一个隐藏字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2012-11-19
    • 2011-05-22
    • 2011-11-05
    相关资源
    最近更新 更多