2011-10-19 29 views
9
events: 
    'click' : 'select' 

मोबाइल सफारी पर इस ईवेंट का उपयोग करते समय ईवेंट को दो बार ट्रिगर होने पर ट्रिगर हो जाता है। क्या यह एक ज्ञात बग या कुछ है जो मैं स्वयं कर रहा हूं?Backbone.js क्लिक करें ईवेंट

मैं के बाद से

events: 
    'touchstart' : 'select' 

करने के लिए इसे बदल दिया है और यह बहुत अच्छा काम करता है लेकिन इसका मतलब है कि यह सामान्य ब्राउज़रों में अब काम नहीं करेगा।

किसी भी जानकारी के लिए धन्यवाद।

उत्तर

1

मैं बैकबोन से परिचित नहीं हूं, लेकिन शायद इसे सशर्त रूप से सेट करने का प्रयास करें?

if ('ontouchstart' in document.documentElement) { 
    // 'touchstart': 'select' 
} else { 
    // 'click': 'select' 
} 
16

इस कोड का प्रयास करें:

TouchView = Backbone.View.extend({ 
    events: function() { 
    return MOBILE ? 
     { 
     "touchstart": 'select' 
     } : 
     { 
     "mousedown": 'select' 
     } 
    } 
} 

यह देखें कार्रवाई में: http://jsfiddle.net/dira/Ke2px/2/

+0

मेरे लिए काम नहीं किया (कंसोल में कुछ भी आउटपुट नहीं देखा)। रीढ़ की हड्डी घटना प्रणाली हालांकि काम कर रही थी क्योंकि जब मैंने इसे बदल दिया तो "घटना # मेन" पर बदल गया। – Nippysaurus

+0

@ निप्पिसॉरस आपको 'मोबाइल' का पता लगाने के लिए अपना कोड होना होगा। –

3

मैं Modernizr का इस्तेमाल किया है स्पर्श डिवाइस का पता लगाने और कोड निम्नलिखित इस्तेमाल किया और यह मेरे लिए काम किया।

events :function(){ 
    return Modernizr.touch ? 
    { 
     "touchstart #edit" : "openEdit", 
    }: 
    { 
     "click #edit" : "openEdit", 
    } 
} 
+0

पूरी तरह से काम किया!touchstart touchmove touchend माउसओवर MouseMove mousedown mouseup क्लिक: –

3

मैं सामान्य रूप से backbone.touch for Backbone जब एक स्पर्श डिवाइस प्रयोग किया जाता है कि बंदर पैच Backbone.View घटनाओं को छूने के लिए प्रतिक्रिया करने के लिए, या नियमित रूप से क्लिक ईवेंट जब नहीं बनाने के द्वारा एक ही समस्या हल हो जाती है।

आप या तो बस स्रोत फ़ाइल को शामिल कर सकते हैं ताकि यह आपके सभी click बैकबोन में दृश्यों को बदल सके। दृश्य, या आप कोड पर एक झलक ले सकते हैं और इसे स्वयं लागू कर सकते हैं।

2

मैं दोनों घटनाओं के प्रकार परिभाषित किये और यह एक मोबाइल और डेस्कटॉप पर मेरे लिए काम करता है:

events: { 
'click' : 'select', 
'touchstart' : 'select' 
} 
+3

'का चयन करें' विधि दो बार सक्रिय होगा यही कारण है, के बाद से जब आप एक स्पर्श डिवाइस पर नल यह सभी घटनाओं आग – SimplGy

0

coffeescript का उपयोग करना, मैं निम्नलिखित करना चाहते हैं, मैं कभी भी एक कारण नहीं पाते हैं आधुनिकीकरण में लाने के लिए जब इन मोबाइल उपकरणों में इन दिनों वास्तव में एक स्पर्श डिवाइस है, मेरा मतलब है कि आखिरी बार आपको वास्तव में ऐसा कुछ समर्थन करना पड़ा जो नहीं था?

window.isTouchDevice = (/android|webos|iphone|ipod|ipad|blackberry|iemobile/i.test(navigator.userAgent.toLowerCase())) 

    events: -> 
    for k, v of this when /click/.test(k) and isTouchDevice 
     mobileKey = k.replace('click','touchstart') 
     events[ mobileKey ] = v 
     delete events[ k ] 
    return events 

कॉफ़ीस्क्रिप्ट इस प्रकार की सूची समझों के लिए बेहतर पढ़ता है imho।

0

यह मेरे लिए काम किया।

events:{ 
    'click #edit':'select', 
    'touchstart #edit':'select' 
}, 
select: function(e){ 
    e.stopPropagation(); 
    e.preventDefault(); 
    console.log('open upload dialog ', e.type); 
} 

अब जब आप डिवाइस स्पर्श करते हैं तो यह परीक्षण करते हैं e.type टचस्टार्ट होना चाहिए और केवल एक बार आग लगनी चाहिए। नो-टच डिवाइस पर क्लिक करने के लिए वही। यदि कोई अभी भी इसके लिए एक सरल समाधान की तलाश में है।

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