0

私はovimapsAPIを使用しており、イベントハンドラーを備えたポリラインがあります。イベントハンドラは次のようになります

 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が表示されます。同じポリラインをクリックするたびに、まったく同じX、Y、およびタイムスタンプが取得されます。誰かが何か考えや回避策を持っていますか?

4

2 に答える 2

0

とにかく、OVImap APIについてはよくわかりませんが、独自のイベントオブジェクトがハンドラーメソッドに渡されると思います。それがあなたに正しい値を与えるかどうか見てください。

リスナー関数は次のようになります。

myClickableThing.addListener('click', function(event){this._clickFunction(event)});

お役に立てれば。

ちなみに、グーグルマップと、evt変数のスコープが正しくない特定のブラウザで同様の問題が発生しました。

それがあなたの問題かどうかはわかりません。

于 2011-08-12T17:56:18.383 に答える
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);
    }
   }
于 2011-08-15T13:13:19.740 に答える