2011-12-13 26 views
4

这可能是一个愚蠢的问题提交,但我无法弄清楚如何做到这一点。 所以,我是新来斯卡拉/升降机和我读http://simply.liftweb.net/index-4.8.html#toc-Section-4.8 ajax的形式章,但本例中的“RedirectTo”似乎并不很“才算是Ajax”给我。通常在通过ajax提交表单的情况下,您只需部分提交相同的页面,对吧? 所以这就是我想要做的,现在完全失败了。 我通过ajax提交表单后,如何让Lift恢复仅仅是同一页面的一部分?如何重新呈现AJAX页面后的部分形式的电梯(斯卡拉)

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

基本上,我有什么看起来是这样的:

<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

如果你已经知道如何做到这一点,你可以解释一下。我想用电梯和没有彗星使用阿贾克斯。 – Rajesh 2012-03-20 07:24:10

回答

2

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

+0

感谢您的提示,但我仍然不确定如何做到这一点。因为我的页面上有两个部分:添加新条目的表单和条目列表(我希望在提交表单后更新)。基本上,就像第二章简单举起的聊天示例一样。除了我不想使用彗星的东西 - 这对我想完成的事情似乎有点矫枉过正。你会知道一个更精细的例子,朝着这个方向发展吗? – heapifyman 2011-12-14 13:20:16

0

你有一个2步表单吗?以上海报是正确的。

保存在一个RequestVar你的转换。

在上面的例子中

,你要保存的方法是渲染,所以第一个memoize的变换:

private def renderTest= SHtml.memoize { render } 

然后,你可以保存这个memoized转型的RequestVar(持续1个请求),或可能是TransientRequestVar,这取决于你的需求。

private object testTemplate extends RequestVar(renderTest) 

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

我可能误会了原来的问题,二/三,如果你想要做一个2步的形式,你并不真正需要的memoize的。备忘录是如果当前表单中的内容发生变化,并且您希望通过ajax事件更新它,即单击或更改时,B/C通常表单不会更新,除非您进行了ajax提交。