我今天有点无聊,我想不出一个优雅的解决方案来解决这个问题
我继承了一个插件,我需要修改它,以允许传递一个enabled或disabled状态给它,让它分离它的所有事件,显示disabled状态等。
就像jQuery UI 插件一样,我只是想使用…
$('div').myPlugin('disabled');
这个我没有问题。
但是,插件附加了许多没有命名空间的事件。我希望事件具有命名空间,这样我就可以轻松地删除事件。
有许多事件被绑定,所以我想嘿,为什么我不重载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
的末尾,还是有一个更简单的方法?
先保存函数,后替换。
var oldBind = $.fn.bind;
$.fn.bind = ...what ever you wanted...
$.fn.bind = oldBind;
这应该可以,它是未经测试的,所以告诉我如果它不工作。