有没有一种优雅的方法来重载插件内的jQuery方法?

时间:2011-10-11 00:03:02

标签: javascript jquery

今天我有一点沉闷的时刻,我无法想到这个问题的优雅解决方案。

我继承了一个插件,我需要修改它以允许将启用的禁用的状态传递给它,让它分离所有事件,显示已禁用状态等

就像jQuery UI 插件一样,我只是想用...

$('div').myPlugin('disabled');

我没问题。

但是,该插件会附加许多不是namespaced的事件。我希望事件是命名空间,因此我可以轻松删除事件。

有许多事件被绑定,所以我想嘿,我为什么不重载bind()来自动附加命名空间?

我想出了这个......

(function(oldBind) {
    $.fn.bind = function() {
        if (arguments.length >= 2) {
            arguments[0] += '.my-plugin';
        }
        return oldBind.apply(this, arguments);
    }
})($.fn.bind);  

我将它放在插件的顶部,在return this.each(fn)代码之前。

它似乎工作得很好。

然而,我抛出一个console.log(arguments[1].toString())并注意到(正如我所料)这覆盖了插件之外的主要jQuery bind()

这个重载bind()只能用于此插件的最佳方法是什么?

我应该简单地放在插件$.fn.bind = oldBind的末尾还是有更简单的方法?

1 个答案:

答案 0 :(得分:2)

之前只需保存该功能,然后在之后将其替换。

var oldBind = $.fn.bind;
$.fn.bind = ...what ever you wanted...
$.fn.bind = oldBind;

这应该是诀窍,它是未经测试的,所以如果它不起作用,请告诉我。