1

我想自定义确认对话框。在我自定义确认对话框之前,一切都很完美。当我点击删除链接

<%= link_to image_tag("icon_delete.png", :border => 0), user, method: :delete ,data: { confirm: 'Are you sure delete:' + user.email } %>

浏览器显示默认的确认弹出窗口,我在 UserController 中按下 OK->this link call destroy()。现在,我在 user.js.coffee 中实现自定义确认弹出窗口

$.rails.allowAction = (link) ->
return true unless link.attr('data-confirm')
$.rails.showConfirmDialog(link) # look bellow for implementations
false # always stops the action since code runs asynchronously

$.rails.confirmed = (link) ->
link.removeAttr('data-confirm')
link.trigger('click.rails')


$.rails.showConfirmDialog = (link) ->
message = link.attr 'data-confirm'
html = """
     <div class="modal" id="confirmationDialog">
       <div class="modal-header">
         <a class="close" data-dismiss="modal">×&lt;/a>
         <h3>Are you sure Mr. President?</h3>
       </div>
       <div class="modal-body">
         <p>#{message}</p>
       </div>
       <div class="modal-footer">
         <a data-dismiss="modal" class="btn">Cancel</a>
         <a data-dismiss="modal" class="btn btn-primary confirm">OK</a>
       </div>
     </div>
     """
$(html).modal()
$('#confirmationDialog .confirm').on 'click', -> $.rails.confirmed(link)

这一次,当我点击删除链接时 -

  1. 浏览器未显示自定义确认弹出对话框或默认弹出对话框
  2. 在 UserController 中调用的链接show()而不是destroy()
    --> 这里发生了什么,在我实现自定义确认对话框之前一切正常。我没有更改 route.rb 中的任何内容。

我使用 Ruby 1.9.3 版和 Rails 4.0.0 版。我的资产/javascripts/application.js

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .

宝石文件

gem 'sass-rails', '~> 4.0.0'
gem 'bootstrap-sass', '2.3.2.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'

# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'

有人可以帮我吗?

4

2 回答 2

0

看起来您正在使用此处描述的实现:http ://rors.org/demos/custom-confirm-in-rails

您发布的代码与原始文章中显示的代码的缩进不同。在咖啡脚本中缩进非常重要,所以如果你的真实代码没有正确缩进,你应该尝试一下。

例如,第一个函数应该如下所示:

$.rails.allowAction = (link) ->
  return true unless link.attr('data-confirm')
  $.rails.showConfirmDialog(link) # look bellow for implementations
  false # always stops the action since code runs asynchronously
于 2013-10-10T03:16:49.687 回答
0

花了 2 天寻找解决方案后。在文件 application.js 中,只需添加行:

//= require bootstrap-modal 

为了引导 modal() 工作。现在一切都很完美

于 2013-10-10T07:54:12.210 回答