【发布时间】:2011-07-18 23:36:21
【问题描述】:
我的 Javascript 还不够完善,我正在努力重写提供的 rails.js 中的一个函数。
我想修改 a[data-confirm] 的处理方式,使用 jQuery UI 模式对话而不是原版 javascript confirm()。
rails.js中的相关函数为allowAction(element)。如果我在另一个文件中定义它,我可以从 firebug 控制台成功调用它,但 rails.js 版本仍然是从具有 data-confirm 属性的锚点调用的。
我认为这是因为整个 rails.js 文件被包裹在:
(function($) {
...
})( jQuery );
有没有一种明智的方法来覆盖这个函数,不修改提供的rails.js?
编辑:
rails.js 到 allowAction 的调用被封装在 .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;
}
});
我还尝试在 rails.js 之前和之后包含我的 javascript,但无济于事。
编辑:
所以,如果我调用 .die('click.rails'),我可以重新定义整个 click.rails 事件,但不会调用原始的 handleRemote() 和 handleMethod() 函数。
【问题讨论】:
标签: jquery ruby-on-rails-3 overriding unobtrusive-javascript