今天我有一点沉闷的时刻,我无法想到这个问题的优雅解决方案。
我继承了一个插件,我需要修改它以允许将启用的或禁用的状态传递给它,让它分离所有事件,显示已禁用状态等
就像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
的末尾还是有更简单的方法?
答案 0 :(得分:2)
之前只需保存该功能,然后在之后将其替换。
var oldBind = $.fn.bind;
$.fn.bind = ...what ever you wanted...
$.fn.bind = oldBind;
这应该是诀窍,它是未经测试的,所以如果它不起作用,请告诉我。