2011-08-16 20 views
0


我在我的项目中使用dojo 1.5库。在IE9上工作时,dojo.stopEvent和preventDefault中断以防止浏览器右键单击action.However但我得到在http://bugs.dojotoolkit.org/changeset/23802/dojo上的补丁。
但是我不想在库本身中进行更改。我正在寻找编写自己的代码来通过覆盖event.js的方法来修补此问题。
但我无法重写匿名函数。
我该如何解决这个问题?
在此先感谢。dojo:重写events.js中的匿名函数来处理IE9中的事件

回答

1

你指的是哪个匿名函数?

在过去,我通过保留各种问题的补丁文件以及创建适当的在构建/发布/部署过程中修补Dojo的脚本来解决类似的问题。这样,至少你有一个你知道在升级时要注意的补丁文件列表,如果你的构建过程可以从一个干净的Dojo检出开始,并根据需要修改它,那么你不必担心关于你所有的开发者都有相同的'习惯'的道场踢。例如,当我是猴子补丁代码时,我也使用类似的方法。

// 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"); 
    } 
}); 

编辑:我现在更了解你了。我认为你可以做到这一点的唯一方法是做这样的事情:

// 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定义。

就我个人而言,我会使用上面讨论的补丁方法,并使用构建系统来应用它。

+0

嗨,感谢您的回复......我也提到了上面的URL。请参考下面的链接:http://bugs.dojotoolkit.org/changeset/23802/dojo。我想在此链接中进行更改。您将通过单击event.js链接找到event.js文件。我想覆盖所有这些函数以提供dojo.isie <9检查。 例如:_fixEvent – harris

+0

更新了我的答案。请给我一点,所以我可以停止得分666 :) – mrtom

+0

嗨,感谢您的回复...但仍然右键点击上下文菜单隐藏在默认浏览器的contextmenu下。 – harris