基于模型事件触发jquery

时间:2012-04-20 23:07:25

标签: jquery ruby-on-rails

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

使用30多种不同类型的通知,在控制器的create.js.erb文件中使用此代码(检查用户是否应该提示通知)是混乱的;使用回调将是非常优选的。

请不要用jquery show / hide方法回复,因为那不是我要问的。任何输入都会非常感激(好吧,除了解释jquery的hide / show方法之外的任何输入)。这是回调:

  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);
});

1 个答案:

答案 0 :(得分:0)

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

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

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

确保DRYability使用模型回调或模型观察者将事件推送到Comet,数据库中的表,Pusher或任何符合您需求的解决方案。