Как да извикам унищожаване на деактивирана джаджа 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, методът за унищожаване не се извиква (код от 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. net/9yygj1wm/1 . Имайте предвид, че remove() не е същото като destroy(). унищожи премахва и прави други задачи често   -  person Marcos Pérez Gude    schedule 08.07.2015
comment
премахване на извиквания събития за работа, но simpleWidget(destroy) извиквания унищожава метода директно.   -  person Vladislav Kurkotov    schedule 08.07.2015


Отговори (1)


Здравейте, не знам indeep flow, но според моята груба сила открих, че това решава проблема

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

});

използвайте това за временно, експертите ще ви обяснят :)

person saravanakumar    schedule 08.07.2015