如何以 Rails 方式处理 JavaScript 事件(例如“link_to :remote”)?

How to handle JavaScript events (e.g. 'link_to :remote') the Rails Way?

提问人:user502052 提问时间:5/18/2014 最后编辑:Brian Tompsett - 汤莱恩user502052 更新时间:1/20/2020 访问量:1767

问:

我正在使用 Ruby on Rails 4,我想以 Rails 的方式处理 JavaScript 事件。也就是说,例如,鉴于我有以下内容

link_to('destroy', article_path(@article), :method => :delete, :remote => true)

当我单击上面生成的链接时,我希望 JS 事件通过删除已删除的文章 DOM 元素来更新页面内容。AJAX 响应,无论它是什么,都应该被忽略。success

我知道rails.js文件的存在,但我不知道如何使用它来完成我正在寻找的东西。

javascript ruby-on-rails ruby-on-rails-4 dom-events unobtrusive-javascript

评论


答:

5赞 Aliaksandr 5/18/2014 #1

有一个 wiki 页面 https://github.com/rails/jquery-ujs/wiki/ajax 其中包含对 ujs 自定义事件的解释。这是您案例中的一个小示例:

$('a').on 'ajax:success', -> alert 1

更新日期如果要阻止评估 XHR 响应,请将属性添加到远程链接:data-type=text

link_to('destroy', article_path(@article), :method => :delete, :remote => true, 'data-type' => 'text')

评论

0赞 user502052 5/18/2014
谢谢。顺便说一句:如何忽略AJAX响应?也就是说,在成功时,AJAX 响应是重定向到另一个页面,我想忽略该重定向。
0赞 Aliaksandr 5/18/2014
你说你有包含函数的响应者吗?destroy.js.erbwindow.location
0赞 user502052 5/18/2014
不,在我的控制器中,我有.我想忽略 上的这种行为。format.js { render :js => "window.location.replace('#{articles_path}');" }ajax:success
0赞 user502052 5/18/2014
我想我不必更改控制器,我可以直接在回调函数中“忽略”响应(在示例中,它是一个重定向,但它可以是任何内容)。但是如何做到这一点呢?ajax:success
0赞 Aliaksandr 5/18/2014
啊,好吧,我抓住了。我认为最清晰的方法是将属性添加到您的链接中,这样响应就不会被JS评估。data-type='text'