2013-03-07 9 views
10

मैं WinJS में एक कस्टम ईवेंट के लिए इवेंट हैंडलर लिखने की कोशिश कर रहा हूं। मैं भी यकीन है कि यह कैसे काम करता है IE में नहीं कर रहा हूँ - मैं एक कस्टम घटना का निर्माण कर रहा हूँ और यह भेजने -प्रेषण है एक सिंक या एसिंक फ़ंक्शन

var eventObject = document.createEvent("CustomEvent"); 
eventObject.initCustomEvent("dropbomb", true, true, null); 
this._element.dispatchEvent(eventObject); 

मेरे हैंडलर है -

this._element.addEventListener("logtelemetry", function() { 
       console.log("boom"); 
}); 

मैं कुछ किया जा सकता है कि हैंडलर बुलाया जाएगा सिंक में और बाद में नहीं? यदि हां तो सबूत क्या है।

+0

@ मैथलेटिक्स, क्यों? यदि आप मैन्युअल रूप से ईवेंट भेजते हैं, तो यह तुरंत क्यों नहीं फेंक देगा? – gdoron

+0

@gdoron मुझे लगता है कि मुझे नहीं पता। दस्तावेज पढ़ने पर, व्यवहार वास्तव में स्पष्ट नहीं है। – Mathletics

+0

@ मैथलेटिक्स, मेरे उत्तर का बिंदु ... :) – gdoron

उत्तर

1

WinJS.Utilities.eventMixin के डिफ़ॉल्ट कार्यान्वयन का उपयोग करके हैंडलर तुरंत कॉल किया जाएगा। कोई स्थगित नहीं है।

आपका व्यक्ति संचालकोंsetTimeout/setImmediate/setInterval/requestAnimationFrame, या कुछ अन्य कस्टम लुढ़का कार्यान्वयन का उपयोग करके आस्थगित काम करने के लिए चुन सकते हैं।

ध्यान दें कि अगर आप, डोम घटनाओं के बारे में बात कर उन्हें बबल सामने डोम तत्व पेड़ से पूछ रहे हैं - कि मैं पर 100% स्पष्ट नहीं कर रहा हूँ

+0

मानक के रूप में ['setImmediate'] (https://developer.mozilla.org/en/docs/Web/API/Window/setImmediate) विनिर्देश देखने के लिए तत्पर हैं! –

12

यह होने की गारंटी है (शायद किसी को यहाँ है कि विशिष्ट जोड़ सकते हैं) तुल्यकालिक है क्योंकि:

dispatchEvent के रिटर्न मान इंगित करता है कि श्रोताओं जो घटना preventDefault बुलाया संभाला के किसी भी।

के बाद से वापसी मान इंगित करता है कि श्रोताओं है कि घटना preventDefault बुलाया संभाला के किसी भी, विधि (वापस नहीं) को ब्लॉक करना होगा श्रोताओं के सभी जब तक जो एक तुल्यकालिक कॉल की परिभाषा है क्रियान्वित किया जाता है,।

उपरोक्त उद्धरण the dispatchEvent specification in DOM Level 2 Events से एक अंश है, जिसने नवंबर 2000 में "अनुशंसा" स्थिति (मानक) वापस हासिल की। ​​इंटरनेट एक्सप्लोरर ने इस मानक since at least IE 9 के साथ अनुपालन किया है।

खुद के लिए सत्यापित करें, तुरंत अपने .dispatchEvent कॉल के बाद एक console.log बयान जोड़ सकते हैं और देखते हैं कि "boom" (अपने ईवेंट हैंडलर से) हमेशा पहले लॉग होता है करने के लिए।

+0

+1 कृपया मुझे धन्यवाद देने के लिए धन्यवाद, मैं गलत था! – gdoron

+0

अच्छा जवाब। संदर्भ के लिए, createEvent/initCustomEvent को कस्टमएवेंट() कन्स्ट्रक्टर https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent के पक्ष में बहिष्कृत किया गया है – Ryan

संबंधित मुद्दे