Закрытие Javascript / Обработка событий Кошмар - PullRequest
0 голосов
/ 12 августа 2011

Я использую API карт ovi и у меня есть ломаная линия с обработчиком событий.Обработчик события выглядит следующим образом:

 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 и метку времени.У кого-нибудь есть мысли или обходной путь?

Ответы [ 2 ]

0 голосов
/ 15 августа 2011

Прежде всего, спасибо всем, кто ответил.Мне удалось решить эту проблему, хотя я не могу сказать вам, почему она не сработала в первую очередь (если кто-то регулярно ловит рыбу в стандарте 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);
    }
   }
0 голосов
/ 12 августа 2011

В любом случае, я не уверен в API OVImap, но я предполагаю, что он передаст вам свой собственный объект события в метод обработчика.посмотрите, дает ли это правильные значения.

ваша функция слушателя будет выглядеть примерно так:

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

Надеюсь, это поможет.аналогичная проблема на картах Google и в одном конкретном браузере, где переменная evt была неправильно определена или что-то в этом роде.

Я не уверен, что это ваша проблема.

...