0

我知道关于通知有很多关于 SO 的问题,但我还没有遇到任何关于触发 jquery 以基于模型事件显示通知的问题。我将通知包装在一个显示设置为无的 div 中,并希望从模型访问 jquery 以显示它们。

对于 30 多种不同类型的通知,在控制器的 create.js.erb 文件中包含此代码(检查是否应向用户提示通知)很麻烦;使用回调将是非常受欢迎的。

请不要用 jquery 显示/隐藏方法来回应,因为这不是我要问的。任何输入将不胜感激(嗯,除了解释 jquery 的隐藏/显示方法之外的任何输入)。这是回调:

  after_create :hundredrep

  def hundredrep
    unless Badge.where(:user_id => current_user.id, :name => "hundredrep", :category => "3").any?
        if current_user.reputation > 100 
            current_user.badges.create(:name =>"hundredrep", :category = "3")
        end
    end
  end

我想在上面的回调中调用 jquery:

$(document).ready(function() { 
    $(".browser_notice").slideDown(500);
});
4

1 回答 1

0

要将数据从服务器推送到客户端,您必须使用以下技术之一:

  • 定期向服务器发送 XHR 调用以获取更新(从技术上讲不是推送)
  • 打开与服务器的持久连接,以便服务器可以在需要时将数据写入流(HTTP 流/firehose API)
  • 发送一个 XHR 请求,服务器将在需要数据推送之前打开该请求(HTTP 长轮询)

根据您需要的反应程度(什么是“实时”:1 秒、10 秒、30 秒、1 分钟?),第一种方法是最简单的方法。对于 HTTP 流式传输或长轮询,您必须采用Comet 方法/事件驱动的 IO 服务器,例如 Goliath、NodeJS、Tornado 等。您还可以查看即插即用 API,例如Pusher .

为确保 DRYability 使用模型回调或模型观察器将事件推送到 Comet、数据库中的表、推送器或任何适合您需要的解决方案。

于 2012-04-21T15:09:28.633 回答