2012-04-20 65 views
0

我知道有关于通知的SO有很多问题,但我没有遇到触发jQuery基于模型事件显示通知的任何触摸。我有一个包装在div中的显示设置为none的通知,并希望从模型中访问jquery以显示它们。基于模型事件触发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); 
}); 
+0

请格式化你的问题,这是很难阅读。 – Jasper 2012-04-20 23:11:14

+0

'请不要回应jquery显示/隐藏方法,因为这不是我要求的。'有点矛盾'任何输入将不胜感激。' – Jasper 2012-04-20 23:11:46

+1

你是说你想让模型通知''before_save'或类似的回调?这完全违反了MVC约定,模型应该完全不知道UI的原因。如果你可以给出一个更具体的例子,你可以帮助你想出更好的方法。 – Andrew 2012-04-20 23:45:18

回答

0

若要从服务器到客户端推送数据,你将不得不使用的一个这些技术:

  • 定期发送XHR调用服务器以获取更新(从技术上讲不是推)
  • 打开的持久连接W¯¯第i个服务器,让你直到需要数据推送服务器可以将数据写入到需要时流(HTTP流/流水API)
  • 发送XHR请求,服务器将让开(HTTP长轮询)

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

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

+0

您能否请您提供一些关于如何在轨道中使用XHR呼叫来实现上述通知的指导? – 2012-04-23 01:09:12