2011-12-15 12 views

答えて

5

バックボーンは、イベントはビューの要素(view.elプロパティ)と要素の上のイベントをサブスクライブするためにハッシュ使用していますので、これは不可能です。その場合は、あなたの一般的なアプリワイドビューのKeyDown入力を受け入れる作ることができます子孫。ビューの要素の外側にある要素からのイベントをサブスクライブしません。

したがって、ビューの要素がtableの場合、keydownイベントがテーブルで発生するとdoSomething()関数が呼び出されますが、keydownイベントがページの別の要素で発生した場合は呼び出されません。

+0

方法を使用して見ることがKeyPressイベントで確認できますか?私はそれを甘やかすわけではない - ちょうどそれの楽しみ/好奇心のため。 –

+1

@PLJ elが$( "body")の場合、動作するはずです。身体を要素として持つ多くのバックボーンビューを知らないでください。 – Paul

2

一般的に「HTML」この質問を参照してください動作するはずではKeyDown話す:しかし

keydown on body?

を、によってトリガーされるバックボーンビューでイベントを持つことが一般的に優れていますビューのエルの要素。

events: { 
    'keydown': 'doSomething' 
} 
1

ビューの初期化メソッド内でjQueryなどのフレームワークを使用してバインドするだけです。

var View = Backbone.View.extend({ 
     initialize: function() { 
     _.bindAll(this, "keyPress"); 
     $(document).bind('keydown', this.keyPress); 
     }, 
     keyPress: function(e) { 
     console.log(e.keyCode); 
     alert(e.keyCode); 
     return false; 
     } 
    }); 

バインドを解除することを忘れないでください。重要です。あなたは、ビューはまだDOM(ドキュメント)にある場合、 `エル= $(「体」を)`持つビューについて$(document).find(this.$el).size()

if($(document).find($(this.options.container)).size() <= 0) { 
     alert("view not in document"); 
     $(document).unbind('keydown', this.keyPress); 
}else { 
     alert("view is here"); 
} 
関連する問題