1

我正在寻找在编码实践方面最可取的实践

我有一个评论系统,对于每条评论,你都可以回复。这让我有几个实现这一点的选择(假设后端已经创建)

  1. 当用户单击“ reply”时,将触发 ajax,获取适当的部分(包括身份验证令牌等)并将其插入适当的位置
  2. 我对每条评论都有一个隐藏的表单,点击reply只会让它可见
  3. 当用户单击回复并将其插入到单击回复的相应 div 时,我使用 javascript 即时生成表单

我的问题是

for 1 - 这会导致请求、延迟,我不确定这里是否需要 ajax

2 - 页面上的表格太多。想象一下成千上万条评论,所以对于每条评论,都会有一个看起来或多或少相同的表格

for 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>
4

1 回答 1

2

我之前遇到过类似的案例,我以类似于您的#1 的 Ajax 解决方案结束。

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

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

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

我认为#1 很好。不会有太多的 Ajax 请求。用户只会在需要时请求表单,并且延迟太小而无法注意到。我什至设置sleep了增强加载效果:) 此外,Basecamp 还大量使用 Ajax 来渲染动态的东西。

PS 感谢 Leon 修改我的语法 :)

于 2013-05-18T07:54:05.107 回答