这可能是一个愚蠢的问题,但我无法弄清楚如何做到这一点。 所以我是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”?
答案 0 :(得分:2)
查看http://lift.la/shtmlidmemoize-simple-ajax-updating(Example Code)。 SHtml.memoize
和SHtml.idMemoize
会自动缓存HTML代码。不知道为什么在Simply Lift书中这个例子中没有使用它。
答案 1 :(得分:0)
你有两步表格吗?上面的海报是正确的。
将转化保存在RequestVar
。
在上面的示例中,您要保存的方法是渲染,因此首先记住变换:
private def renderTest= SHtml.memoize { render }
然后,您可以将此备忘转换保存在RequestVar中(持续1个请求),或者TransientRequestVar
,具体取决于您的需求。
private object testTemplate extends RequestVar(renderTest)
如果要从ajax事件重播转换 - testTemplate.is.applyAgain。
我可能误解了原来的问题,b / c如果你想做一个2步形式,你真的不需要记忆。 memoize是当前表单上的某些内容发生变化,并且您希望通过ajax事件更新它,即在点击或更改时,b / c通常表单不会更新,除非您进行了ajax提交。