2013-05-18 25 views
1

我找这是最明智的编码习惯在页面上太多的形式 - 这是一个问题,

我有一个评论系统,为每个评论,你可以回复方面的做法。这使我的几个选项上实施这个(假设已经创建后端)

  1. 当用户点击“reply”,阿贾克斯被触发,得到适当的部分(包括authenitcation令牌等),并将其插入即到适当的地方
  2. 我必须为每个评论一个隐藏的表单,并单击reply只会使其可见
  3. 我使用JavaScript来动态生成当用户点击回复的形式,将其插入到适当的div回复被点击的地方

我的每个问题是

1 - 这会导致请求延迟,我这里需要

2不知道阿贾克斯 - 在页面上太多的形式..试想一下,成千上万的意见,以便为每个评论会有这看起来形式或多或少相同

3 - 我不知道我是否可以在客户端上生成的真实性令牌

形式应该是这个样子

 <form accept-charset="UTF-8" action="comments/3/reply" data-remote="true" method="post"> 
    <div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"> 
<input name="authenticity_token" type="hidden" value="J0/asxkDH....vdlKLOUuQ9/TAxACWnZKdwy+c="></div> 
        <textarea id="comment" name="comment" class="tae" style="overflow: hidden;"></textarea> 
        <input name="commit" type="submit" value="Send"> 
    </form> 

回答

2

我之前遇到过类似的情况,而且我以与#1类似的Ajax解决方案结束了。

对于#2,是的,即使隐藏,也有太多的表单。我不喜欢那样。

对于#3,我想使用一个JS模板,它是Backbone中流行的风格。但是,那时我没有找到一个成熟和最新的jQuery模板解决方案。在这种情况下我也没有足够的时间,所以我放弃了。

附加:对于#3 authenticity_token,我没有测试过这一点,但我不认为这会是一个问题,如果一个表单模板已输出到DOM与令牌准备。它们适用于同一用户和同一类型的对象。我们只需要更改对象ID或其他小事。需要注意的一件事是,一旦处理了成功的Ajax请求,您需要通过Ajax重新加载模板

我觉得#1很好。不会有太多的Ajax请求。用户只在需要时才会申请表格,而且延迟时间太短而无法注意。我甚至设置了sleep以增强加载效果:)此外,Basecamp还大量使用Ajax来渲染动态事物。

P.S.感谢莱昂修改我的语法:)

相关问题