我正在考虑实现类似以下的内容,并且想知道a)由于我没有想到的某种原因,这是否可能是一个非常糟糕的主意,b)如果不是 - 是否有现有的gem可以做到这一点。
基本上,我希望能够对来自 Rails 控制器的 JavaScript 事件进行排队,以便在下次渲染时触发所有排队的事件并将其从队列中删除。有点像 flash 机制,但用于事件。所以例如:
在我的控制器中:
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})
有什么想法吗?
Edit:这会很有用,例如当创建项目时,服务器可以重定向到该项目的编辑表单,或者可以重定向到相关控制器的索引操作。这些页面不知道刚刚创建了一个项目。然而,也许我想做一些事情,比如如果项目创建成功则关闭对话框窗口,但如果未成功创建则将其保持打开状态,或者我可能需要了解它的任何其他可能原因。显然不仅与创建相关,这只是我用来说明问题的示例
Edit:赏金奖励给任何以某种方式令人信服地说服我这是一个好/坏主意或提供更好选择的人
我明白你想做什么,但你需要小心地将事情分开。
在这种情况下我会做的是创建一个哈希,然后#to_json
在你看来。让我们在你的行动的底部说
控制器
@events = [
{ :type => "item_created", :message => "Woohoo! Item was created"}
]
索引.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
});
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)