我正在尝试将this.moveCursor
与Backbone一起使用,但当我console.log
时,它表示未定义。该方法明确定义,所以我不确定这里有什么问题。
起初我认为这是因为this.
并且switch
语句没有返回。
但是,即使console.log
语句之外的switch
,也是如此。
有人可以帮忙吗?
setup: function(){
$(document).on('keydown', this.keyCode);
},
keyCode: function(e){
switch(e.keyCode) {
case 37: console.log(this.moveCursor(-1,0)); break; //undefined
case 38: return this.moveCursor(0,-1); break;
case 39: return this.moveCursor(1,0); break;
case 40: return this.moveCursor(0,1); break;
case 32: return play.selectBlock(); break;
case 13: return play.selectBlock(); break;
};
console.log(this.moveCursor()); //undefined
},
moveCursor: function(x, y){
var cursorSelected = play.get('cursorSelected'),
cursorX = play.get('cursorX'),
cursorY = play.get('cursorY');
console.log('moveCursor');
if(cursorSelected){
x += cursorX;
y += cursorY;
this.getBlock(x,y);
} else {
//
}
},
答案 0 :(得分:1)
您有上下文问题。 this
关键字代表keyCode()
函数的调用者,无论keyCode()
的定义位于何处。
要了解有关此console.log( this )
的尝试的更多信息,它会向您展示执行该时刻的真实this
。
要解决此问题,您可以使用_.bindAll()。
如果keyCode()
是Backbone.View.events
的处理程序,则绑定应该已经完成。
我看到keyCode()
是普通jQuery事件的处理程序:
$(document).on( 'keydown', this.keyCode );
_.bindAll()
适用于此,您也可以使用jQuery.proxy()这样:
$(document).on( 'keydown', $.proxy( this.keyCode, this ) );