我正在使用ovi maps API,我有一个带有事件处理程序的折线。事件处理程序如下所示
SomeClass = Base.extend({
_clickFunction: function(evt) {
alert(this.someBaseClassMethod() + 'x: ' + evt.targetX+ 'y:'+ evt.targetY);
},
go: function(){
myClickableThing.addListener('click', this._clickFunction.bind(this));
}
}
我第一次点击我的东西时,我得到的X和Y对于光标的像素位置和准确的时间戳是正确的。对于每次后续点击相同的polyLine,我得到完全相同的X,Y和时间戳。有没有人有任何想法或解决方法?
答案 0 :(得分:0)
无论如何我不确定OVImap API,但我猜它会将自己的事件对象传递给处理程序方法。看看是否能给你正确的价值。
您的侦听器功能将类似于:
myClickableThing.addListener('click', function(event){this._clickFunction(event)});
希望这有帮助。
在旁注上我们在谷歌地图和一个特定的浏览器上遇到类似的问题,其中evt变量没有正确的范围或类似的东西。
我不确定这是不是你的问题。
答案 1 :(得分:0)
首先,感谢所有回答的人。我确实设法解决了这个问题,虽然我不能告诉你它为什么不起作用(如果有人经常在ECMAscript标准中钓鱼,请随时与我联系)。问题绝对是this._clickFunction.bind(this))
。由于这个原因,这会创建一个保留evt
对象的闭包。解决方案(正如你在评论中建议的那样)只是通过在构造函数中设置函数来解决该问题。
原件:
SomeClass = Base.extend({
_clickFunction: function(evt) {
alert(this.someBaseClassMethod() + 'x: ' + evt.targetX+ 'y:'+ evt.targetY);
},
go: function(){
myClickableThing.addListener('click', this._clickFunction.bind(this));
}
}
修正版:
SomeClass = Base.extend({
_clickFunction:null,
constructor: function(){
this._clickFunction = function(evt) {
alert(this.someBaseClassMethod() + 'x: ' + evt.targetX+ 'y:'+ evt.targetY);
}
},
go: function(){
myClickableThing.addListener('click', this._clickFunction);
}
}