Как вызвать уничтожение отключенного виджета jquery?

Используемые библиотеки: 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 метод destroy не вызывается (код из 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" )и инициирует вызовы _on для события remove. Чем удалить звонки $.widget.destroy

Как я могу вызвать функцию уничтожения даже на отключенном виджете?

ОБНОВЛЕНИЕ: создан jsFiddle для демонстрации http://jsfiddle.net/9yygj1wm/.

ОБНОВЛЕНИЕ: это исправлено в jquery-ui-1.9.2, но как это можно исправить без обновления библиотеки?


person Vladislav Kurkotov    schedule 08.07.2015    source источник
comment
Он вызывается путем загрузки нового частичного представления и уничтожения старого с помощью виджета, поэтому я не могу проверять наличие виджетов каждый раз, когда перезагружаю какую-либо часть страницы.   -  person Vladislav Kurkotov    schedule 08.07.2015
comment
На самом деле, если виджет отключен, метод _destroy все еще вызывается, иначе он не будет работать должным образом. Я предполагаю, что что-то еще мешает вашей функциональности работать.   -  person dfsq    schedule 08.07.2015
comment
Хм, ты прав. Можете ли вы сказать мне, где я мог бы посмотреть?   -  person Vladislav Kurkotov    schedule 08.07.2015
comment
Нет, вы не правы))   -  person Vladislav Kurkotov    schedule 08.07.2015
comment
Взгляните на скрипку   -  person Vladislav Kurkotov    schedule 08.07.2015
comment
в вашей скрипке я меняю remove() на simpleWidget(destroy), и, похоже, это работает.... jsfiddle. сеть/9yygj1wm/1 . Обратите внимание, что remove() — это не то же самое, что destroy(). уничтожить удаляет и делает другие задачи обычно   -  person Marcos Pérez Gude    schedule 08.07.2015
comment
удалить события вызовов для работы, но simpleWidget(destroy) вызывает метод уничтожения напрямую.   -  person Vladislav Kurkotov    schedule 08.07.2015


Ответы (1)


Привет, я не знаю глубокого потока, но, согласно моей грубой силе, я обнаружил, что это решает проблему.

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

});

используйте это временно, эксперты объяснят :)

person saravanakumar    schedule 08.07.2015