常用库:jquery-ui-1.9.1
和jquery-1.8.2
我有一个小部件与一些功能从destroy
调用
$.widget("my.customwidget", {
options: {
},
_destroy: function () {
var self = this;
this._super();
//some usefull functionality
},
//some other declarations
});
如果我的小部件被禁用,由于jquery-ui中的代码销毁方法没有被调用(来自jquery-ui的代码):
function handlerProxy() {
// allow widgets to customize the disabled handling
// - disabled as an array instead of boolean
// - disabled class as method for disabling individual parts
if ( instance.options.disabled === true || $( this ).hasClass( "ui-state-disabled" ) ) {
return;
}
return ( typeof handler === "string" ? instance[ handler ] : handler )
.apply( instance, arguments );
}
这个handleProxy
在_on
函数内部。callStack看起来像这样:当我的小部件的元素被删除时,$.cleanData
被调用。然后cleanData
调用$( elem ).triggerHandler( "remove" )
,触发remove
事件调用_on
。然后删除调用$.widget.destroy
我怎么能调用销毁函数,即使在禁用的小部件?
UPDATE:创建jsFiddle用于演示http://jsfiddle.net/9yygj1wm/
UPDATE:这在jquery-ui-1.9.2
中已修复,但如何在不升级库的情况下修复?
嗨,我不知道深度流,但根据我的蛮力,我发现这是解决问题
$("#destroyWidget").click(function () {
$("a").simpleWidget("enable");
$("a").remove();
});
暂时使用,专家会解释的