dojo: переопределить анонимную функцию в events.js для обработки событий в IE9 - PullRequest
0 голосов
/ 16 августа 2011


Я использую библиотеку dojo 1.5 в своем проекте. Пока я работаю на IE9, dojo.stopEvent и предотвращает перерывы по умолчанию, чтобы предотвратить действие щелчка правой кнопкой мыши в браузере.Я не хочу вносить изменения в саму библиотеку. Я ищу написание собственного кода для исправления этого путем переопределения методов event.js.
Но я не могу переопределить анонимную функцию.
Как мне решить эту проблему?
Заранее спасибо.

1 Ответ

1 голос
/ 16 августа 2011

К какой анонимной функции вы обращаетесь?

В прошлом я сталкивался с подобными проблемами, сохраняя файлы исправлений для различных проблем и создавая сценарии, которые исправляют Dojo во время моей сборки / выпуска / развертыванияобрабатывать по мере необходимости.Таким образом, по крайней мере, у вас есть список файлов патчей, за которыми вы должны следить при обновлении, и если ваш процесс сборки может начаться с чистой проверки Dojo и изменить его по мере необходимости, вам не нужно беспокоитьсяо том, что все ваши разработчики имеют одно и то же «кастомное» Dojo, работающее вокруг.

FWIW Я использую аналогичный подход, когда я, например, исправляю код на обезьянах.

// Monkey patch dojo.foo
dojo.provide('my.project.monkeyPatches.foo);

dojo.require('dojo.foo');

dojo.ready(function() {
  if (dojo.version.major === 1 && dojo.version.minor <= 5) {
    dojo.foo.someFunc = ...;
  }
  else {
    console.error("You should remove the monkeyPatch for dojo.foo now, it's no longer needed");
  }
});

РЕДАКТИРОВАТЬ: Iтеперь понимаю тебя лучше.Я думаю, что единственный способ сделать это - сделать что-то вроде:

// Monkey patch dojo.foo
dojo.provide('my.project.monkeyPatches.event);

dojo.require('dojo.event');

dojo.ready(function() {
  if (dojo.version.major === 1 && dojo.version.minor === 5) {
    if (dojo.isIE === 9 && !dojo.isQuirks) { // Invert the if
      // Copy the functions for non-IE from the event.js file
      dojo.mouseButtons = { // line 291 - 300 from http://bugs.dojotoolkit.org/browser/dojo/dojo/trunk/_base/event.js?rev=23802

      }
    }
  }
  else {
    console.error("You should remove the monkeyPatch for dojo.foo now, it's no longer needed");
  }
});

Это отстой, но я не могу придумать более разумный способ сделать это.Как написан код, функция, которую вы хотите вызвать, никогда не определяется для IE9.

Лично я бы использовал подход с патчами, о котором я говорил выше, и использовал бы систему сборки для его применения.

...