【问题标题】:How to rerender part of page after ajax submit of form in Lift (Scala)如何在电梯(Scala)中提交表单的ajax后重新呈现页面的一部分
【发布时间】:2011-12-13 23:25:03
【问题描述】:

这可能是一个愚蠢的问题,但我不知道该怎么做。 所以我是 Scala/Lift 的新手,我阅读了 http://simply.liftweb.net/index-4.8.html#toc-Section-4.8 中的 ajax 表单章节,但示例中的“RedirectTo”对我来说似乎不是很“ajaxian”。通常在通过 ajax 提交表单的情况下,您只会部分地重新呈现同一页面,对吗? 所以这就是我想要做的,现在完全失败了。 通过 ajax 提交表单后,如何让 Lift 仅重新呈现同一页面的一部分?

任何提示将不胜感激。谢谢。

基本上,我的样子是这样的:

    <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))
  }
}

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

【问题讨论】:

  • 如果你知道如何做到这一点,你能解释一下吗?我想用有电梯和没有彗星的ajax。

标签: ajax forms scala lift form-submit


【解决方案1】:

看看http://lift.la/shtmlidmemoize-simple-ajax-updating (Example Code)。有SHtml.memoizeSHtml.idMemoize 会自动缓存HTML 代码。不知道为什么在《Simply Lift》一书中的这个例子中没有使用它。

【讨论】:

  • 感谢您的提示,但我仍然不确定该怎么做。因为我的页面上有两个部分:添加新条目的表单和条目列表(我想在提交表单后更新)。基本上,就像第 2 章中的简单提升聊天示例一样。除了我不想为此使用彗星的东西——这对于我想要完成的事情来说似乎有点矫枉过正。你知道朝那个方向发展的更详细的例子吗?
【解决方案2】:

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

将您的转换保存在RequestVar

在你上面的例子中,你要保存的方法是渲染,所以第一次记住转换:

 private def renderTest= SHtml.memoize { render }

然后,您可以将此记忆化转换保存在 RequestVar(持续 1 个请求)中,或者根据您的需要保存在 TransientRequestVar 中。

 private object testTemplate extends RequestVar(renderTest)

当您想从 ajax 事件重放转换时 - testTemplate.is.applyAgain。

我可能误解了最初的问题,b/c 如果你想做一个 2 步表格,你真的不需要 memoize。 memoize 是如果您当前的表单发生更改,并且您想通过 ajax 事件更新它,即在单击或更改时,b/c 通常不会更新表单,除非您进行了 ajax 提交。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2012-04-19
    • 2013-02-09
    • 2013-10-22
    • 2016-02-28
    • 2018-10-06
    相关资源
    最近更新 更多