Domanda

Questo potrebbe essere abbastanza semplice, ma devo dire che sono un po 'confuso su questo argomento.

sto scrivendo codice basato su due biblioteche popolari:

  • jQuery
  • underscore.js

Mi chiedo solo quale sarebbe il modo migliore per isolare il codice e prevenire i conflitti e come unire con le sue dipendenze?

Con la fusione intendo metterli all'interno dello stesso file.

È stato utile?

Soluzione

Si potrebbe facilmente mettere i due di loro nello stesso file, perché le uniche cose che si trasformano globale sono window._, window.$ e window.jQuery. Le altre variabili e funzioni sono avvolti in un ambito locale, quindi non ci sarà alcun conflitto.


Modifica : il proprio codice potrebbe essere messo nello stesso file troppo. E se si preferisce rimuovere le variabili globali, sia jQuery e Underscore hanno un metodo no-conflitto, che sostituisce le variabili globali con i loro vecchi valori (spesso undefined). Si potrebbe avvolgere il codice nel proprio ambito locale e non vi sarà più alcun problema:

// jQuery and Underscore source here

// You code here, wrapped in a self-executing function:

(function($, _){

  // here you can add your code:
  $('#test').text('jQuery works');

  _(3).times(function(){
    alert('Underscore works' );
  });

})(jQuery.noConflict(true), _.noConflict());

// no jQuery nor Underscore here:

alert(typeof jQuery, typeof $, typeof _);

Questo sembra abbastanza difficile, ma lasciatemi spiegare molto rapidamente. È possibile eseguire una funzione immediatamente dopo aver definito, in questo modo:

(function(){
  alert('I am being executed');
})();  // <-- basically how you call a function normally: func();

E si può passare gli argomenti in esso:

(function(a){
  alert(a);
})('test');

Sia $.noConflict() e _.noConflict() rimuovere le variabili globali e restituiscono un riferimento alla variabile jQuery e sottolineatura. Così si può passare questi nella funzione self-executing come argomenti e felice di tutti (:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top