дисекция на mootools

имах проблем и разрешаването му изискваше функционалност, вградена в mootools. така че започнах да го дисектирам. има функция, интересувам се от IframeShim.destroy тя е подобна на тази

destroy: function(){
        if (this.shim) this.shim.destroy();
        return this;
    }

сега какво не мога да разбера в това какво е shim. По-конкретно това, което се опитвам да разбера, е Request.JSONP.cancel кодът му е като този

cancel: function(){
        if (this.running) this.clear().fireEvent('cancel');
        return this;
    }

сега този cancel извиква clear, чийто код е като този

clear: function(){
        this.running = false;
        if (this.script){
            this.script.destroy();
            this.script = null;
        }
        return this;
    }

сега в тази ясна функция мога да видя destroy(), което ме отвежда до shim (вижте кода в горната част) и съм заседнал. Всички тези функции са в mootools-more.js

Помогне?

би било чудесно, ако някой може да предостави обикновена реализация на javascript на Request.JSONP.cancel Има ли JQuery алтернатива?


person lovesh    schedule 29.07.2011    source източник


Отговори (1)


Унищожаването, което се извиква от метода Request.JSONP.clear, не е IframeShim.destory, то е част от ядрото на mootools. Ето източника:

destroy: function(){
    var children = clean(this).getElementsByTagName('*');
    Array.each(children, clean);
    Element.dispose(this);
    return null;
},

Всичко, което Element.dispose прави, е да извика естествения DOM метод на jasvascript Node.removeChild, който изтрива елемент от DOM.

Така че всичко, което JSONP.cancel прави, е да види дали DOM възел на скрипт е добавен чрез Request.JSONP.cancel. Ако е така, той премахва елемента на скрипта от от DOM чрез removeChild.

Важното е, че зададе флага running на false. Ако погледнете Request.JSONP.success, първото нещо, което прави, преди да извика вашата функция за обратно извикване, е да провери дали флагът running е зададен на false и ако е, той се връща незабавно. Това на практика "отменя" изпълнението.

Ако имате предвид дали анулира HTTP заявката, отговорът е не, не го прави.

person Philip Ramirez    schedule 29.07.2011
comment
благодаря, +1. дали извикването на destroy()на възел отменя всички http заявки, направени от възела. ако не разбирате какво имам предвид, моля, вижте това - person lovesh; 29.07.2011
comment
означава ли това, че Request.JSONP.cancel не може да отмени HTTP заявка? - person lovesh; 29.07.2011
comment
@lovesh не, не отменя HTTP заявката. Това, което прави, е, че отменя изпълнението на обратното извикване, след като скриптът се зареди. - person Philip Ramirez; 29.07.2011
comment
Известие за @lovesh в Request.JSONP.send те задават src да бъде URL адресът, подаден в опциите + callback=Request.JSONP.request_map.request_'+ index. Това го свързва с картографиран Request.JSONP.success, който преди изпълнение първо проверява дали this.running е невярно и ако е, връща незабавно и по този начин го отменя (тъй като присвоеното обратно извикване никога няма да се изпълни). - person Philip Ramirez; 29.07.2011