我今天有点沉闷,我无法想到这个问题的优雅解决方案.
我继承了一个插件,我需要修改它以允许将启用或禁用状态传递给它,让它分离所有事件,显示禁用状态等.
就像一个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);
我把它放在插件的顶部,然后返回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;
这应该是诀窍,它是未经测试的,所以如果它不起作用,请告诉我.