如何在Lift(Scala)中ajax提交表单后重新提交部分页面

如何在Lift(Scala)中ajax提交表单后重新提交部分页面,ajax,forms,scala,lift,form-submit,Ajax,Forms,Scala,Lift,Form Submit,这可能是一个愚蠢的问题,但我不知道怎么做。 所以我是Scala/Lift新手,我阅读了中的ajax表单一章,但是示例中的“重定向到”对我来说似乎不是很“ajaxian”。通常在通过ajax提交表单的情况下,您只需部分重新提交同一页面,对吗? 所以这就是我正在尝试做的,我现在完全失败了。 在通过ajax提交表单后,如何让Lift Reender只是同一页面的一部分 如有任何提示,将不胜感激。谢谢 基本上,我所拥有的是这样的: <div id="main" class="lift:su

这可能是一个愚蠢的问题,但我不知道怎么做。 所以我是Scala/Lift新手,我阅读了中的ajax表单一章,但是示例中的“重定向到”对我来说似乎不是很“ajaxian”。通常在通过ajax提交表单的情况下,您只需部分重新提交同一页面,对吗? 所以这就是我正在尝试做的,我现在完全失败了。 在通过ajax提交表单后,如何让Lift Reender只是同一页面的一部分

如有任何提示,将不胜感激。谢谢

基本上,我所拥有的是这样的:

    <div id="main" class="lift:surround?with=default;at=content">
    <h2>Welcome to your project!</h2>
    <div class="lift:Test">
        <div>
            <form class="lift:form.ajax">
                <fieldset>
                    <label for="name">Name:</label>
                    <input id="name" name="name" type=text>
                    <p></p>
                    <input id="save" type="submit" value="Save">
                </fieldset>
            </form>
        </div>
        <div>
            <span id="theName">Name</span>
        </div>
    </div>
</div>

class Test {

  def render = {
    var name = ""

    def process(): JsCmd = {
      Thread.sleep(500)

      S.notice("Entered name is: %s".format(name))
      Noop
    }

    "#theName " #> "This shall be updated with the name given in the form above" & 
    "#name" #> (SHtml.text(name, name = _) ++ SHtml.hidden(process))
  }
}

欢迎来到你的项目!
姓名:

名称 课堂测试{ def呈现={ var name=“” def process():JsCmd={ 线程。睡眠(500) S.notice(“输入的名称为:%S”。格式(名称)) 努普 } “#名称”#>“应使用上述表格中给出的名称更新该名称”& “#name”#>(SHtml.text(name,name=#)++SHtml.hidden(进程)) } }

提交表单时如何更新“theName”?

请查看()。有
SHtml.memoize
SHtml.idMemoize
自动缓存HTML代码。不确定为什么在简单提升手册的本例中不使用它。

您有一个两步表单,对吗?上面的海报是正确的

将转换保存在
RequestVar

在上面的示例中,要保存的方法是render,因此首先要记住变换:

 private def renderTest= SHtml.memoize { render }
然后,您可以将此记忆转换保存在RequestVar(持续1个请求)中,或者根据您的需要保存在
TransientRequestVar

 private object testTemplate extends RequestVar(renderTest)
当您想要从ajax事件testTemplate.is.ApplyGain重播转换时


我可能误解了原来的问题,b/c如果你想做一个两步表格,你真的不需要备忘录。备忘录是指如果当前表单发生了更改,并且您希望通过ajax事件(即单击或更改)进行更新,通常情况下,除非您进行ajax提交,否则表单不会更新。

谢谢您的提示,但我仍然不确定如何进行更新。因为我的页面上有两个部分:添加新条目的表单和条目列表(我希望在提交表单后更新)。基本上,就像simply lift第2章中的聊天示例一样。除非我不想用comet的东西来做这件事——这对我想要完成的事情来说似乎有点过分了。你知道一个更详细的例子吗?如果你知道怎么做,你能解释一下吗。我想使用带lift和不带comet的ajax。