如何在不修改提供的rails.js的情况下覆盖Rails 3不显眼的javascript函数?

nfm*_*nfm 2 jquery overriding unobtrusive-javascript ruby-on-rails-3

我的Javascript不是很划清楚,我正在努力覆盖提供的功能rails.js.

我想a[data-confirm]使用jQuery UI模式对话而不是vanilla javascript 来修改处理方式confirm().

相关功能rails.jsallowAction(element).如果我在另一个文件中定义它,我可以成功地从firebug控制台调用它,但rails.js仍然从具有data-confirm属性的锚点调用该版本.

我认为这是因为整个rails.js文件包含在:

(function($) {
...
})( jQuery );
Run Code Online (Sandbox Code Playgroud)

是否有一种合理的方法来覆盖此功能,而无需修改提供的功能rails.js

编辑:

在呼叫rails.jsallowAction被包裹在一个.live呼叫:

  $('a[data-confirm], a[data-method], a[data-remote]').live('click.rails', function(e) {
  var link = $(this);
  if (!allowAction(link)) return false;

  if (link.attr('data-remote')) {
    handleRemote(link);
    return false;
  } else if (link.attr('data-method')) {
    handleMethod(link);
    return false;
  }   
});
Run Code Online (Sandbox Code Playgroud)

我也尝试过包括我之前和之后的javascript rails.js,但无济于事.

编辑:

所以,如果我打电话,.die('click.rails')我可以重新定义整个click.rails事件,但不会调用原始handleRemote()handleMethod()函数.

jan*_*eve 7

仅供参考,我刚刚在Rails jquery-ujs中添加了一个外部API,正是为了这类.您现在可以通过插入(并重写1行)$.rails.allowAction函数使rails.js使用自定义确认方法.

请参阅我的文章,Rails jQuery UJS:Now Interactive,以获得有关示例的完整说明.

编辑:现在,在此提交中,confirm可以以相同的方式覆盖对话框函数.例如

$.rails.confirm = function(message) { return myConfirmDialog(message); };
Run Code Online (Sandbox Code Playgroud)