2011-08-16 59 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