2009-11-12 12 views
5

Quindi ho una pagina che utilizza sia gli script AJAX Prototype che Mootools.Domanda di conflitto Prototype/Mootools

C'è molto più Mootools che Prototype, quindi mi chiedo se Prototype ha una funzione simile a $j = jQuery.noConflict(); di jQuery che posso usare per ridefinire l'alias $ per Prototype?

Grazie!

risposta

8

La nuova versione di MooTools ha una modalità alcun conflitto. Sfortunatamente, Prototype no, il che significa che lo $ dovrà essere associato a Prototype.

Per abilitare la modalità Dollar Safe, aggiornare la versione di MooTools e assicurarsi di includere MooTools dopo Prototype.

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

Dopo questo modo, $ sarà legato a Prototype. Negli script MooTools, sostituire tutti i riferimenti $ a 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); 
    } 
}); 

oppure è possibile utilizzare una chiusura:

(function(){ 

    var $ = document.id; 

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

})(); 

Maggiori informazioni sulla modalità provvisoria dollaro è disponibile in blog MooTools':

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

+0

Grazie, speravo che Prototype avesse qualcosa di simile a questo dato che è di gran lunga l'implementazione più piccola, ma naturalmente, non si è mai così fortunati. – Marty

+1

Mentre sono d'accordo sul fatto che non si voglia una libreria da 200 kb (compressa), il 67 kb di MooTools compresso è molto rispettabile. Non basare la tua scelta sulla dimensione, ma sulla funzionalità. MooTools fa tutto ciò che fa Prototype e io consiglierei di eliminare Prototype. Inoltre, usa il sito Web per creare una build personalizzata di MooTools e rimuovere tutto ciò che non ti serve. –

3

Ho una soluzione molto semplice:

<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>