Javascript 回调函数不使用';看不见';这';
我的回调函数没有看到“this” 这是我绑定按键的代码:Javascript 回调函数不使用';看不见';这';,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我的回调函数没有看到“this” 这是我绑定按键的代码: initialize: function () { $(document).bind('keyup', this.keyPress); _.bindAll(this, 'rotate'); }, rotate: function (event) { //smth... } 以下是功能按键: keyPress: function(event)
initialize: function () {
$(document).bind('keyup', this.keyPress);
_.bindAll(this, 'rotate');
},
rotate: function (event) {
//smth...
}
以下是功能按键:
keyPress: function(event) {
console.log(event.keyCode);
var pageX = 0, pageY = 0;
var ev = new Object();
ev.pageY = pageY;
ev.pageX = pageX;
func = this.rotate;
func(ev);
//also I tried like this:
//this.rotate(ev);
}
这是一个错误:“未捕获类型错误:未定义不是函数”
我搞不懂
我会非常感谢你的帮助,谢谢 这里的问题是,在JQuery中,bind添加了一个事件侦听器,它没有设置“this”的上下文 您需要使用下划线将该方法绑定到上下文 e、 g
这将确保“this”引用正确的对象理想情况下,您需要显示更多的代码,因此我们可以更好地了解事物的范围,以及
此
实际上是什么此
引用,而keyPress
hander在哪里定义?你也可以在函数本身绑定上下文-keyPress:function(e){…}。bind(this)@LouisK:但是this
不会是定义keyPress
时的实例,this
可能是当时的window
$(document).bind('keyup',this.keyPress.bind(this))
可以工作,或者.\bindAll(this,'rotate','keyPress')$(document).bind('keyup',this.keyPress)
。如果删除此视图或创建另一个视图,则仍会保留对文档的零散绑定。这个绑定应该有一个remove
覆盖,它可以更好地使用.bindAll
方法(或事件名称空间)。当然,在替换视图之前,管理视图的任何人都需要调用remove
。
initialize: function () {
$(document).bind('keyup', _.bind(this.keyPress, this));
_.bindAll(this, 'rotate');
},
rotate: function (event) {
//smth...
}