【发布时间】:2015-09-26 03:47:52
【问题描述】:
使用的库: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
即使在禁用的小部件上,我如何调用销毁函数?
更新:为演示创建了 jsFiddle http://jsfiddle.net/9yygj1wm/
更新:这已在jquery-ui-1.9.2 中修复,但如何在不升级库的情况下修复它?
【问题讨论】:
-
它是通过加载新的局部视图并用小部件销毁旧的来调用的,所以每次重新加载页面的任何部分时我都无法检查小部件。
-
实际上,如果小部件被禁用,_destroy 方法仍然会被调用,否则将无法正常工作。我认为其他东西正在阻止您的功能运行。
-
嗯,你是对的。你能告诉我去哪里看吗?
-
不,你错了))
-
看小提琴
标签: javascript jquery jquery-widgets jquery-events