Rails 同步 - 更新布局中的计数器

Rails Sync - Update a counter in layout

我正尝试在我的网站 header 中显示一个评论计数器,有几个选项:

ul
    = sync_new partial: "show", resource: Commontator::Comment.new
/ also with
ul
    = sync partial: "show", resource: Commontator::Comment.new
/ also with
ul
    = sync_new partial: "show", collection: Commontator::Comment.all
/ also with
ul
    = sync partial: "show", collection: Commontator::Comment.all

我的部分:

li
    a = comment.class.all.size

我不清楚sync_newsync的区别。

我的理解:

  1. 当传递 collection 时,同步呈现 collection 中每个项目的部分,这没有意义显示计数器。
  2. 当传递资源时,sync 渲染传递的资源的部分,问题是当创建或销毁另一个评论时,传递的资源不会更新计数器。

也许我应该转向完全不同的方向,比如直接使用 Faye。任何建议表示赞赏。

也发布了 here

我将创建一个计数器缓存,以便在发布新评论时缓存发生变化。我将使用缓存渲染模型:

= sync partial: 'discussion', resource: discussion

然后,当评论被创建、编辑、删除时,部分应该更新。这将是部分:

li
  ul
    - discussion.thread.comments.each do |comment|
      li = comment.body

您可以使用 Sync 的 Javascript 回调,例如 beforeInsertafterInsertbeforeUpdateafterUpdatebeforeDestroy、和 afterDestroy (more info)

您可以使用它们 increase/decrease 每当插入或删除评论时在特定元素上显示的计数器:

class Sync.CommentShow extends Sync.View

  # OVERRIDE
  afterInsert: ->
    commentsCount += 1;
    $('#counter-div').text(commentsCount);

  # OVERRIDE
  afterRemove: ->
    commentsCount -= 1;
    $('#counter-div').text(commentsCount);

希望您和其他观众觉得这有用。