2011-05-17 8 views
11

मैं एक दृश्य से मुख्य घटना को कैप्चर करने की कोशिश कर रहा हूं:दृश्य से मुख्य घटना को कैप्चर कैसे करें?

myView = Backbone.View.extend({ 

    el: $('#someDiv'), 
    initialize: function(){ 
    // initialize some subviews 
    }, 
    render: function(){ 
    return this; 
    }, 
    events:{ 
    'keypress #someDiv': 'showKey' 
    }, 
    showKey: function(e){ 
    console.log(e.keyCode); 
    } 
}) 

यह काम नहीं करता है?

ps: दृश्य या उसके सबव्यू में कोई इनपुट [तत्व] तत्व नहीं है। मुझे बस यह जानने की जरूरत है कि उपयोगकर्ता कोई कुंजी दबाता है और फिर दृश्य पर कुछ करता है।

+0

मैं अपने कोड और काम करते हैं, के लिए इस्तेमाल किया केवल एक चीज आप को याद करने की जरूरत है कि तत्व आप एक घटना के भीतर "होना चाहिए जोड़ना चाहते है एल देखें "उदाहरण के लिए जिस तत्व को आप एक ईवेंट संलग्न करना चाहते हैं, वह" #someDiv " –

उत्तर

4

कुंजी दबाया गया पृष्ठ पर केंद्रित तत्व पर जाता है। यदि आपके पास आपके विचार में कुछ भी नहीं है और दृश्य में कोई फोकस नहीं है, तो आपके पास कोई भी महत्वपूर्ण प्रेस ईवेंट नहीं होगा।

(Btw अगर आप कुंजी दबाएँ घटना, this.el के लिए करते हैं "कुंजी दबाने" क्या करना चाहते हैं: "showKey") कोड ऊपर आप में

शरीर सबसे अधिक संभावना सभी कुंजी दबाने घटनाओं प्राप्त होगा।

14

आप दृश्य इनिशियलाइज़ में ऐसा कर सकते हैं() फ़ंक्शन:

_.bindAll(this, 'on_keypress'); 
$(document).bind('keypress', this.on_keypress); 
+0

के भीतर होना चाहिए: यदि आपको क्रोम में काम नहीं कर रहे कीप्रेस के साथ समस्या है तो कुंजीपटल के बजाय 'कीडाउन' ईवेंट का उपयोग करें। –

+13

दस्तावेज़ में एक कीप्रेस को बाध्य करने से सावधान रहें, जब आप अपना दृश्य हटाते हैं तो यह बाकी घटनाओं से अनबंड नहीं होगा। जब आप अपना दृश्य हटाते हैं, तो भी कॉल करें: $ (दस्तावेज़) .unbind ('keypress', 'on_keypress'); – MrGrigg

+0

जब मैंने अपना विचार हटा दिया, मुझे '$ (दस्तावेज़) करना था .unbind ('keypress', this.on_keypress)'। लगभग श्रीग्रिग के जवाब की तरह, लेकिन वास्तविक कार्य को पारित करना, इसके नाम की एक स्ट्रिंग नहीं। –

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