javascript - Rails - 从 Controller 触发 javascript 事件

标签 javascript jquery ruby-on-rails events

我正在考虑实现类似以下内容,并且想知道 a) 由于某种我没有想到的原因,这是否可能是一个非常糟糕的主意,以及 b) 如果不是 - 是否存在现有的 gem去做。

基本上,我希望能够从我的 Rails Controller 中对 javascript 事件进行排队,以便在下一次渲染时触发所有排队的事件并将其从队列中删除。有点像 flash 机制,但它是针对事件的。所以例如:

在我的 Controller 中:

def create
  if resource.create 
    add_event('resourceCreated', :id => resource.id)
  end
end

在我的应用程序布局中是这样的:

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

有什么想法吗?

编辑:这很有用,例如创建项目时,服务器可能会重定向到该项目的编辑表单,或者可能会重定向到相关 Controller 的索引操作。这些页面不知道刚刚创建了一个项目。但是,也许我想做一些事情,比如如果项目创建成功则关闭对话框窗口但如果没有成功创建则将其保持打开状态,或者我可能需要了解的任何其他可能原因。显然不仅仅与创建相关,这只是我用来说明问题的示例

编辑:赏金会奖励给以某种方式令人信服地说服我这是一个好/坏主意或提供更好替代方案的人

最佳答案

我明白你想做什么,但你需要小心把事情分开。

在这种情况下我会做的是创建一个散列,然后在您的 View 中#to_json。让我们说在你的行动的底部

控制者

@events = [
   { :type => "item_created", :message => "Woohoo! Item was created"}
]

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>

jQuery

$.ready(function() { 
   events.each(function () {
      // ... Do what you need to with this
   });
});

关于javascript - Rails - 从 Controller 触发 javascript 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6705333/

相关文章:

javascript - Firebase 事务错误

javascript - 使用 jQuery 设置要检查的单选框

ruby-on-rails - 有没有办法防止评论在 Rails View 中呈现?

php - 如何将 JavaScript 变量传递给 php 函数

javascript - 需要 Node 中的单例实例

javascript - 使用客户端 Javascript 与本地网络上的设备通信

javascript - 强制 AngularJS 在一次使用多个版本的 jQuery 时使用特定版本的 jQuery

javascript - 如何用逗号替换 <p> 标签

ruby-on-rails - 如何实现 twitter-text-rb

ruby-on-rails - 什么数据库用于 15M 记录和快速搜索索引