我想调用javascript函数,这将是一个基于用户对确认框响应的条件。
例如,我有以下主播:
<%= link_to 'Sign Out', destroy_session_path, confirm: 'Are you sure that you would like to sign out?', method: :delete %>
我是不是应该放弃不显眼的JavaScript和我自己的jQuery的回调绑定到我的锚?
或者是有传递一个回调函数Rails的URL帮手一些神奇的方式吗? 我没有看到在回调中的任何讨论文件 。
通过遵循link_to
源,我看到:confirm
修改传递给convert_options_to_data_attributes方法,它指向UJS脚本捆绑使用Rails这些天(通过jQuery的非侵入式JavaScript)。 在这里,我们发现,最终用户的响应被传递给称为事件confirm:complete
使用data-confirm
在HTML属性。
所以看来,答案是“不,你不能传递通过URL帮手回调”。 但是,你可以把一个回调在您的app/javascript
监听此事件。 这似乎是实现我的目标是最不显眼的方式,考虑到我仍然让轨道处理该事件的预防和传播。 我等待这一切的发生,然后调用我的函数。
$(document).on('confirm:complete', function (e, answer) {
if (answer) {
// user confirmed!
myCallbackFunction();
} else {
// user canceled!
}
});
我有一个类似的问题( 如何使用内联:确认与AJAX调用HTML辅助选项 )。 @弥的回答,即使作品,是不是有什么“Rails 3的方式”是。
- 远程:true选项需要添加到的link_to助手,如
link_to 'Sign Out', destroy_session_path, remote: true, confirm: 'Are you sure that you would like to sign out?', method: :delete
在控制器改变respond_to
块回答JS
创建对应于您的方法,例如destroy_session.js.coffee名的js文件
应用程序/视图/比赛/ destroy_session.js.coffee:
jQuery ->
$("form[data-remote]").on "ajax:success", (e, data, status, xhr) ->
$(e.currentTarget).closest('tr').fadeOut()`
希望帮助