2009-11-12 126 views
5

所以我有一個使用Prototype和Mootools AJAX腳本的頁面。原型/ Mootools衝突問題

Prototype有很多Mootools,所以我想知道Prototype是否有類似於jQuery的$j = jQuery.noConflict();的函數,我可以使用它來重新定義Prototype的$別名?

謝謝!

回答

8

MooTools的最新版本的有沒有衝突模式。不幸的是,Prototype沒有,這意味着$必須綁定到Prototype。

要啓用美元安全模式,請升級您的MooTools版本,並確保在Prototype之後包含MooTools。

<script type="text/javascript" src="prototype.js" /> 
<script type="text/javascript" src="mootools.js" /> 

這樣做後,$將綁定到Prototype。在MooTools腳本中,將所有$引用替換爲document.id

// Before 
var X = new Class({ 
    initialize: function(element){ 
     this.element = $(element); 
    } 
}); 


// After 
var X = new Class({ 
    initialize: function(element){ 
     this.element = document.id(element); 
    } 
}); 

,或者你可以使用閉包:

(function(){ 

    var $ = document.id; 

    this.X = new Class({ 
     initialize: function(element){ 
      this.element = $(element); 
     } 
    }); 

})(); 

對美元安全模式的更多信息,MooTools的博客提供:

http://mootools.net/blog/2009/06/22/the-dollar-safe-mode/

+0

謝謝,我希望Prototype有類似的東西,因爲它到目前爲止是較小的實現,但是自然,一個人從來沒有這麼幸運。 – Marty 2009-11-12 15:54:52

+1

儘管我確實同意你不需要200 kb(壓縮)庫,但MooTools的67 kb壓縮格式非常令人尊敬。不要將您的選擇放在尺寸上,而應放在功能上。 MooTools可以完成Prototype所做的一切,我會建議您放棄Prototype。此外,使用該網站做一個自定義的MooTools構建並刪除任何你不需要的東西。 – 2009-11-12 22:39:03

3

我有一個非常簡單的解決方案:

<script src='mootools.js'></script> 
<script>$moo = $; delete ($);</script> 
<script src='prototype.js></script> 



<script> 

(function ($){ 


//here you can use $ of moo tools 

})($moo); 


//here you can use $ of prototype 


</script>