0

我正在尝试与 Backbone 一起使用this.moveCursor但它说当我. 该方法显然是定义的,所以我不确定这里有什么问题。 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 {
                    //
                }
            },
4

1 回答 1

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 ) );
于 2012-09-01T09:46:29.243 回答