जावास्क्रिप्ट / प्रोटोटाइप गुंजाइश भ्रम

वोट
0

मैं एक जावास्क्रिप्ट वर्ग (प्रोटोटाइप का उपयोग) है कि वहाँ सेकंड की एक निर्धारित संख्या के भीतर कोई माउस आंदोलन अगर निष्क्रिय पेज राज्य स्थापित करेगा बना रहा हूं। जब माउस चालें, वर्ग पेज श्रोताओं की एक सूची के लिए एक संदेश भेजने के द्वारा जाग होगा।

बात मुझे समझ नहीं आता कि है this.handlersएक समारोह (में मान्य है setIdle), लेकिन एक और ( setActive)। नीचे टिप्पणी किए गए कोड मेरी समस्या दिखाता है:

var IM2 = Class.create({

handlers: null,

initialize: function(callback, frequency) {
    this.handlers = [];
    Event.observe(document, mousemove, this.sendActiveSignal);
    Event.observe(document, keypress, this.sendActiveSignal);
    setInterval(this.sendIdleSignal.bind(this), 5000);
},

addListener: function(h) {
    console.log(this.handlers.size());  // it's 0 here, as expected
    this.handlers.push(h);
    console.log(this.handlers.size());  // it's 1 here, as expected
},

sendIdleSignal: function(args) {
    console.log(IDLE);
    this.handlers.each(function(i){
        i.setIdle();
    })
},

sendActiveSignal: function() {
                                    // this.handlers is undefined here. Why?
    this.handlers.each(function(r) {
        r.setActive();
    })
}

});
09/06/2009 को 15:44
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
2

मान लिया जाये कि क्या आपका मतलब यह SendIdleSignal में मान्य है और यह SendActiveSignal में मान्य नहीं है ...

आपका घटना श्रोताओं भी इस तरह बाँध का उपयोग करना चाहिए,:

Event.observe(document, "mousemove", this.sendActiveSignal.bind(this));
Event.observe(document, "keypress", this.sendActiveSignal.bind(this));

इसके अलावा, आप प्रोटोटाइप 1.6 या उच्चतर का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं

document.observe("mousemove", this.sendActiveSignal.bind(this));
document.observe("keypress", this.sendActiveSignal.bind(this));

साथ ही, यदि आप एक सामान्य (ढांचा नास्तिक) जिस तरह से ऐसा करना चाहते हैं, तो आप अपने कार्यों को इस तरह निर्धारित कर सकते हैं:

sendActiveSignal: function() {
    var that = this;
    return function() {
        that.handlers.each(function(r) {
            r.setActive();
        });
    }
}

फिर अपने ईवेंट हैंडलर्स / setInterval के रूप में छोड़ा जा सकता है

Event.observe(document, "keypress", this.sendActiveSignal);
09/06/2009 को 15:52
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more