К какой анонимной функции вы обращаетесь?
В прошлом я сталкивался с подобными проблемами, сохраняя файлы исправлений для различных проблем и создавая сценарии, которые исправляют 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.
Лично я бы использовал подход с патчами, о котором я говорил выше, и использовал бы систему сборки для его применения.