我正在考虑实现类似以下内容,并且想知道 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/