2011-04-22 15 views
10

विशेष रूप से Spidermonkeyइवेंट हैंडलिंग जावास्क्रिप्ट के भीतर आंतरिक रूप से कैसे काम करता है?

मुझे पता है कि आप कार्य लिखते हैं और उन्हें संभालने के लिए उन्हें ईवेंट से जोड़ते हैं।

onClick हैंडलर परिभाषित कहां है और उपयोगकर्ता द्वारा क्लिक किए जाने पर जेएस इंजन onClick ईवेंट को कैसे आग लगाना है?

कोई भी कीवर्ड, डिज़ाइन पैटर्न, लिंक इत्यादि की सराहना की जाती है।

अद्यतन

को समेकित करना लिंक मैं यहाँ उपयोगी पाते हैं:

http://www.w3.org/TR/DOM-Level-2-Events/events.html

https://github.com/joyent/node/blob/master/src/node_events.cc

http://mxr.mozilla.org/mozilla/source/dom/src/events/nsJSEventListener.cpp

+1

स्पाइडरमोन्की ओपन सोर्स है, बेशक, आप हमेशा ... हमेशा ब्राउज़ कर सकते हैं ... [ब्राउज़ करें] (http://mxr.mozilla.org/mozilla/source/js/src/) ... –

+0

@TJ, स्पाइडरमोनकी सिर्फ एक जेएस इंजन, डीओएम की घटना संचालित प्रकृति इसके शीर्ष पर लागू की गई है। –

+0

जिज्ञासा से, आप इस ज्ञान का उपयोग करने में सक्षम होने की उम्मीद कैसे करते हैं? दूसरे शब्दों में, क्या ऐसा कुछ है जो आप ऐसा करना चाहते हैं कि इस रहस्य का उत्तर समाधान के लिए आपके दृष्टिकोण का मार्गदर्शन करेगा? – Pointy

उत्तर

6

Spidermonkey स्वंय परिचालित घटना से जुड़े कुछ भी नहीं है। घटनाएं पूरी तरह से एक डोम चीज हैं।

क्लिक ईवेंट को ब्राउज़र कोड (स्पाइडरमोन्की एम्बेड करने वाली चीज़) द्वारा निकाल दिया जाता है, स्पाइडरमोन्की द्वारा स्वयं नहीं। उस कोड के लिए http://hg.mozilla.org/mozilla-central/file/e60b8be7a97b/content/events/src/nsEventStateManager.cpp देखें जो क्लिक जैसी चीज़ों को प्रेषित करने के लिए ज़िम्मेदार है।

ब्राउज़र भी सेटर विधियों को परिभाषित करता है जो onclick संपत्ति को असाइनमेंट लेते हैं और इसे एक ईवेंट श्रोता पंजीकरण में बदल देते हैं। http://hg.mozilla.org/mozilla-central/file/e60b8be7a97b/dom/base/nsDOMClassInfo.cpp#l7624 देखें जिसे nsEventReceiverSH::SetProperty से बुलाया जाता है और जिन गुणों का नाम (id इस कोड में) IsEventName परीक्षण पास करता है।

जब ईवेंट श्रोताओं पंजीकृत होते हैं और एक ईवेंट निकाल दिया जाता है, तो ईवेंट प्रेषक श्रोताओं को कॉल प्रबंधित करता है; nsJSEventListener लिंक आपको मिला है वह गोंद है जो एक सी ++ HandleEvent को जेएस फ़ंक्शन पर कॉल में कॉल करता है।

तो आपके मामले में, आप श्रोताओं के लिए पंजीकरण/अनियंत्रण तंत्र के कुछ प्रकार चाहते हैं और फिर आपका कार्यान्वयन घटनाओं को आग देगा और उन्हें श्रोताओं को भेज देगा। आप यह आखिरी हिस्सा कैसे करते हैं वह खुले अंत में है; डीओएम घटनाक्रम विनिर्देश को लागू करने की आवश्यकता के कारण गेको कार्यान्वयन में कई बाधाएं हैं, लेकिन आपको कुछ आसान करने में सक्षम होना चाहिए।

+1

आप एक प्रतिभा –

+3

नाह हैं, मैं सिर्फ गेको आंतरिक पर काम करता हूं। –

2
  1. एचटीएमएल सिंक/बुलबुला घटना प्रचार स्कीमा का उपयोग करता है: http://catcode.com/domcontent/events/capture.html
  2. रहे हैं "भौतिक" घटनाओं (माउस, कीबोर्ड) और तार्किक/संश्लेषित लोगों (फोकस, क्लिक value_changed, आदि)
  3. onClick है एक तार्किक घटना - माउस, स्पर्श और/या कीबोर्ड घटनाओं के परिणामस्वरूप उत्पन्न हुई।
  4. माउस (या उंगली स्पर्श) की उत्पत्ति क्लिक घटना माउस के नीचे, चाल और घटनाओं का परिणाम है। ध्यान दें कि माउस नीचे, हिलें और ऊपर डुबकी/बुलबुले घटनाएं हैं। इन "प्रायोगिक" घटनाओं में लक्ष्य तत्व (ओं) क्लिक ईवेंट का लक्ष्य (या स्रोत) होगा। यदि माउस-डाउन/अप ईवेंट के अलग-अलग लक्ष्य होते हैं (डीओएम तत्व) तो उनके सामान्य माता-पिता का उपयोग किया जाता है।
  5. माउस का अनुक्रम, चाल और ऊपर घटनाएं विभिन्न तार्किक घटनाएं उत्पन्न कर सकती हैं: क्लिक करें, स्वाइप करें/स्क्रॉल करें आदि।

मुझे विश्वास है कि यह बुनियादी अवधारणाओं की पूरी सूची है।