【问题标题】:How to call destroy on disabled jquery widget?如何在禁用的 jquery 小部件上调用销毁?
【发布时间】:2015-09-26 03:47:52
【问题描述】:

使用的库:jquery-ui-1.9.1jquery-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


【解决方案1】:

嗨,我不知道深度流程,但根据我的蛮力,我发现这是解决问题

$("#destroyWidget").click(function () {
    $("a").simpleWidget("enable");
    $("a").remove();

});

暂时用这个,专家会解释的:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多