Rails - 从控制器触发javascript事件

jco*_*fey 4 javascript jquery events ruby-on-rails

我正在考虑实施类似下面的内容并且想知道a)如果由于某种原因我可能是一个非常糟糕的想法我没有想到,并且b)如果没有 - 是否有一个现有的宝石来做它.

基本上,我希望能够从我的rails控制器排队javascript事件,以便在下一次渲染时,所有排队的事件都将被触发并从队列中删除.有点像闪存机制,但对于事件而言.例如:

在我的控制器中:

def create
  if resource.create 
    add_event('resourceCreated', :id => resource.id)
  end
end
Run Code Online (Sandbox Code Playgroud)

在我的应用程序布局中,例如:

%javascript
  - @events.each do |e|
    $(document).trigger(#{e.event_name}, #{e.event_data})
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

编辑:这将是有用的,例如,当创建项目时,服务器可以重定向到所述项目的编辑表单,或者可以重定向到相关控制器的索引操作.这些页面不知道刚刚创建了一个项目.但是,如果项目是成功创建的话,或者我想要关闭一个对话框窗口,但如果没有,则将其保持打开状态,或者我可能需要知道的任何其他可能的原因.显然不仅仅与创造有关,这只是我用来说明问题的例子

编辑:赏金归于任何以令人信服的方式说服我,这是一个好/坏的想法或提供更好的选择

Zac*_*lis 5

我看到你想要做什么,但你需要小心保持分开.

在这种情况下我要做的是创建一个哈希,然后#to_json在你的视图中.让我们说你的行动的底部

调节器

@events = [
   { :type => "item_created", :message => "Woohoo! Item was created"}
]
Run Code Online (Sandbox Code Playgroud)

index.html.erb

<div>Your usual stuff goes here</div>
<script type="text/javascript" charset="utf-8">
  var events = <%= raw @events.to_json %> // You must make sure it's properly sanitised
</script>
Run Code Online (Sandbox Code Playgroud)

jQuery的

$.ready(function() { 
   events.each(function () {
      // ... Do what you need to with this
   });
});
Run Code Online (Sandbox Code Playgroud)