在Rails中通过自定义Jquery对话框处理链接的确认

时间:2016-05-02 10:30:44

标签: javascript jquery ruby-on-rails

我需要一个自定义弹出对话框,以替换数据确认的默认浏览器选项。在网上有很多关于方法数据确认的例子:删除,但是我需要进行小的自定义以使其适用于普通链接。

例如,我会为对话框呈现两种类型的链接:

<%= link_to(scoreboard_team_path(@scoreboard, team), remote: true, method: :delete, data: {confirm: "Are you sure you want to delete?"})%> 

<%= link_to "Clear Teams", deleteteams_scoreboard_path(@scoreboard), class: "btn btn-primary reset-link", :data => {:confirm => "Are you absolutely sure you want to delete all teams?"} %>

根据我在线研究的信息,我提出了以下jquery代码,用于对这些类型的链接进行应用程序范围的确认:

$(document).ready(function(){

    $.rails.allowAction = function(link) {
          if (!link.attr('data-confirm')) {
            return true;
          }
          $.rails.showConfirmDialog(link);
          return false;
    };

    $.rails.confirmed = function(link) {
      link.removeAttr('data-confirm');
      if(link.hasClass("reset-link")){
         window.location.replace("" + link.context.href + "");
      } else {
          return link.trigger('click.rails');
      }
      };


     $.rails.showConfirmDialog = function(link) {
          var html;
          var message = link.data("confirm");
          html = "<div id=\"dialog-confirm\" title=\"Warning!\">\n  <p>"+message+"</p>\n</div>";
          return $(html).dialog({
            resizable: false,
            modal: true,
            buttons: {
              OK: function() {
                $.rails.confirmed(link);
                return $(this).dialog("close");
              },
              Cancel: function() {
                return $(this).dialog("close");
              }
            }
          });
      };
});

我的问题是文章的作者没有很好地解释发生了什么。

所以我的问题是:

以下代码的含义是什么:

if (!link.attr('data-confirm')) {
            return true;
          }

window.location.replace("" + link.context.href + "");link.context.href是什么意思?

1 个答案:

答案 0 :(得分:1)

if (!link.attr('data-confirm')) {
  return true;
}

基本上,它检查传入的(jQuery)DOM元素的data-confirm属性值,如果它不存在,该函数将返回true

  

window.location.replace("" + link.context.href + "");link.context.href是什么意思?

$().context已弃用且should not be used。也就是说,它返回jQuery选择器的原始上下文。

一个例子可以给你一个想法:

$('.link'                  ).context;  // Return `document` object
$('.link', $('#wrapper')[0]).context;  // Return `#wrapper` object
<div id="wrapper">
  <a href="#some-link" class="link">Click me</a>
</div>

在您的情况下,似乎link.context.href正在获取DOM元素并访问其href属性。它本来可以做这样的事情link.attr('href')。但是,如果作者决定以这种方式写作,我想有一些优势。